2010-06-19 2 views
2

Я пытаюсь заменить что-то вроде:PHP проблема str_replace/preg_replace с PHP открытых тегов

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

ОЖИДАЕТСЯ:

Hello <?name?> !! 

Результат:

Hello !! 

(Я проверка исходного кода, и у меня есть короткие открытые теги)

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

спасибо.

UPDATE:

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

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

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

Спасибо !!!

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

+0

Добавлено и ОБНОВЛЕНИЕ. – lepe

ответ

2

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

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

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

&lt; &gt; 

вместо этого.

+0

Лучший ответ, чем мой. По крайней мере, вы дали HTML-сущности для замены. Черт, медленная печать. – Mike

1

Это не имеет никакого отношения к Сухозину.

<?name?> !!, когда отображается в результатах HTML страницы в !!

Проверьте исходный код страницы.

1

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

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

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

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

htmlspecialchars заменит:

  • & с & усилителем;
  • "с & Quot;
  • < с & Лт;
  • с & Гт

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

Смежные вопросы