PHP str_replave und "^"

jopjip

Ensign
Registriert
Juni 2008
Beiträge
233
Hi,
ich versuche in einem String das Zeichen "^" durch "^<em style="color:#900;">" zu ersetzen. Wenn ich das "^" maskiere also "\^" schreibe passiert gar nichts, d.h. str_replace findet keine Übereinstimmung und wenn ich einfach nur "^" schreibe, erhalte ich folgende Ausgabe:

HTML:
RewriteRule ^<em style=<em style="color:#900;">"color:#900;">welcome</em>$ index.php?side=<em style="color:#900;">welcome

Im Browser sieht das dann so aus: RewriteRule^"color:#900;">welcome$ index.php?side=welcome

und hier der PHP-Code:

PHP:
$aa = "RewriteRule ^welcome$ index.php?side=welcome";

//"^" ersetzen
$aa = str_replace("^", "^<em style=\"color:#900;\">", $aa);

//Der Rest ist für das Problem unwichtig und funktioniert
$aa = str_replace("\$", "</em>\$", $aa);
$aa = str_replace("=", "=<em style=\"color:#900;\">", $aa);
echo $aa . "</em>";

Wisst ihr, wie man sowas zum laufen bekommt?

MFG

Edit: Es heißt natürlich str_replace in der Überschrift ;-)
 
Nur in dem Beispiel, außerdem geht es ja auch nur darum das anzuzeigen nicht darum dass der Server eingefärbte Anweisungen ausführt. Hat irgendjemand eine Idee, wie man das Dach "^" handelt?
 
Ich vermute es weiß noch immer niemand was jetzt das Problem sein soll.

Du schreibst du willst das ^ ersetzen, oben im Code tust du das aber nicht sondern lässt es ja noch drin.

PHP:
$aa = str_replace("^", "^<em style=\"color:#900;\">", $aa);

Wenn du das ^ weg haben willst dann entferne es doch vor <em

Oder aber ich habe auch noch nicht verstanden was du jetzt genau willst.
 
Also wenn man genau hinguckt und das ist manchmal von Nöten, auch wenn Sonntag ist, dann sieht man, dass der Code, den du aufgeschrieben hast, den ich übrigens auch verwendet habe ;-) nicht funktioniert, weil der den ganzen String verkrüppelt:

String ohne Änderungen:
RewriteRule ^welcome$ index.php?side=welcome
Wie es sein sollte:
HTML:
RewriteRule ^<em style="color:#900;">welcome...
Und das kommt dabei raus:
HTML:
RewriteRule ^<em style=<em style="color:#900;">"color:#900;">welcome...

Bei einem "="-Zeichen funktioniert diese Methode einwandfrei, aber warum nicht beim "^"-Zeichen?
 
Das Problem ist nicht das ^-Zeichen, sondern dass du die Transformationen in einer Kette anwendest: in diesem Ergebnis wird wiederum das = ersetzt, welches natürlich durch die ^-Ersetzung eingefügt wurde usw.

Das Problem liegt in deinem Ansatz.
Lösung:
Mache eine Zeichensuche, suche vom Anfang bis zum Ende das allererste Zeichen, welches ersetzt werden kann, ersetze dieses und wende den Algorithmus dann auf den Rest an, Beispiel:

Code:
Ersetzen von a durch b und b durch a:

xayyab
 ^

xb|yyab
     ^

xbyyb|b
      ^

xbybba

fertig
 
jopjip schrieb:
Also wenn man genau hinguckt und das ist manchmal von Nöten, auch wenn Sonntag ist, dann sieht man, dass der Code, den du aufgeschrieben hast, den ich übrigens auch verwendet habe ;-) nicht funktioniert, weil der den ganzen String verkrüppelt:

String ohne Änderungen:
RewriteRule ^welcome$ index.php?side=welcome
Wie es sein sollte:
HTML:
RewriteRule ^<em style="color:#900;">welcome...
Und das kommt dabei raus:
HTML:
RewriteRule ^<em style=<em style="color:#900;">"color:#900;">welcome...

ahhhh soooo lol jetzt hab ich es verstanden.
 
@ ice-breaker

Jetzt sehe ich auch wo das Problem liegt. Ich denke aber wenn man die Reihenfolge der Befehle ändert, bekommt man auch den gewünschten Effekt.

Danke
 
Zurück
Oben