2 Stimmen

PHP str_replace/preg_replace Problem mit offenen php-Tags

Ich versuche, etwas zu ersetzen wie:

$text = "Hello <--name--> !!";
echo str_replace("--","?",$text);

Erwartet:

Hello <?name?> !!

R

Hello !!

(Ich überprüfe den Quellcode, und ich habe kurze offene Tags aktiviert)

Ich habe so viele Möglichkeiten ausprobiert, aber es scheint, dass ich nie ein Ergebnis erzielen kann. <? (oder <?php ) Zeichenfolge. Ich denke, es kann mit dem Suhosin-Patch zusammenhängen, der in Ubuntu standardmäßig aktiviert ist. Bevor Sie etwas anderes tun, weiß jemand, wie man das zum Laufen bringt?

Ich danke Ihnen.

UPDATEです:

Ich habe es direkt in der Befehlszeile versucht und es hat funktioniert. Ja, das Problem war, dass alles zwischen php-Tags nicht im Browser (Chrome) angezeigt wird, auch nicht im Quellcode.

echo "A <"."?"."php"." echo 1 "." ?".">"." B";

In Chrome wird beim Betrachten des Quellcodes "A B" angezeigt. Aber Firefox zeigt ihn vollständig an... Zusammenfassend lässt sich also sagen, dass Chrome mich ausgetrickst hat ;)

Ich danke Ihnen!!!

Tut mir leid, dass ich die beste Antwort auswählen musste... aber für mich waren die 3 Antworten richtig.

2voto

Pekka Punkte 429407

Haben Sie wirklich in die Quellansicht des Browsers geschaut? <? ?> Abschnitte werden in der Regel als Tags interpretiert.

Wenn Sie nicht mit eval() werden diese Tags auf keinen Fall von PHP interpretiert.

Vielleicht filtert Suhosin diese heraus, aber das würde mich überraschen. Vielleicht können Sie es umgehen, indem Sie

&lt; &gt;

stattdessen.

1voto

Mike Punkte 2365

Es hat nichts mit Suhosin zu tun.

<?name?> !! bei der Anzeige in einer HTML-Seite ergibt !!

Überprüfen Sie die Quelle der Seite.

1voto

Mike Punkte 20677

Ich stimme Pekka und Mike (dem anderen Mike, nicht mir Mike) zu - Sie müssen wirklich den HTML-Quellcode überprüfen, damit er korrekt angezeigt wird. Wenn Sie wirklich die Kleiner-als- und Größer-als-Symbole in der Ausgabe sehen wollen, müssen Sie diese durch HTML-Entities ersetzen (wie von Pekka vorgeschlagen):

$search = array('<', '>', '--');
$replace = array('&lt;', '&gt;', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);

0voto

matsolof Punkte 2525

Sie können auch htmlspecialchars verwenden, etwa so:

$text = htmlspecialchars("Hello <--name--> !!");
echo str_replace("--","?",$text); // Hello &lt;?name?&gt; !!

htmlspecialchars wird ersetzt:

  • & mit &
  • " mit "
  • < mit <
  • mit >

Wenn Sie " aus irgendeinem Grund nicht ersetzen wollen, ist das möglich (siehe http://se2.php.net/manual/en/function.htmlspecialchars.php ). &, < und > werden meines Wissens jedoch immer durch &amp; , &lt; y &gt; wenn Sie htmlspecialchars verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X