PHP str_replace / preg_replace проблема с открытыми тегами php - PullRequest
2 голосов
/ 19 июня 2010

Я пытаюсь заменить что-то вроде:

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

Ожидается:

Hello <?name?> !!

Результат:

Hello !!

(я проверяю источниккод, и у меня включены короткие открытые теги)

Я пробовал так много способов, но кажется, что я никогда не смогу получить в результате ни одну <? (или <?php) строку.Я думаю, что это может быть связано с патчем Suhosin, который по умолчанию включен в Ubuntu.Прежде чем делать что-то еще, кто-нибудь знает, как заставить это работать?

Спасибо.

ОБНОВЛЕНИЕ:

Я попытался прямо в командной строке, и это сработало.Да, проблема заключалась в том, что что-либо между тегами php не отображается в браузере (Chrome), даже в исходном коде.

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

В Chrome отображается «AB» при просмотре исходного кода.Но Firefox отображает его полностью ... Итак, в целом Chrome меня обманул;)

Спасибо !!!

Извините, мне пришлось выбрать лучший ответ ... но для меня 3ответ был верным.

Ответы [ 4 ]

2 голосов
/ 19 июня 2010

Вы действительно смотрели в исходный вид браузера? <? ?> разделы, как правило, интерпретируются как теги.

Если вы нигде не используете eval(), эти теги вообще не будут интерпретироваться PHP.

Может быть, Сухосин отфильтровывает их, но меня это удивит. Вы можете обойти это, используя

&lt; &gt;

вместо.

1 голос
/ 19 июня 2010

Я согласен с Пеккой и Майком (другой Майк, а не я Майк) - вам действительно нужно проверить исходный код HTML, так как он будет отображаться правильно. Если вы действительно хотите видеть символы «меньше» и «больше, чем» в выводе, вам нужно заменить их на HTML-сущности (как рекомендует Pekka):

$search = array('<', '>', '--');
$replace = array('&lt;', '&gt;', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);
1 голос
/ 19 июня 2010

Это не имеет ничего общего с Suhosin.

<?name?> !! при отображении на странице HTML приводит к !!

Проверьте источник страницы.

0 голосов
/ 23 сентября 2010

Вы также можете использовать htmlspecialchars, например:

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

htmlspecialchars заменит:

  • & с &
  • "на"
  • <с <</li>
  • с>

Если по той или иной причине вы не хотите заменять, это возможно(см. http://se2.php.net/manual/en/function.htmlspecialchars.php). &, <и>, насколько мне известно, всегда заменяется на &amp;, &lt; и &gt; при использовании htmlspecialchars.

...