Вопрос

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

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

Ожидал:

Hello <?name?> !!

Результат:

Hello !!

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

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

Спасибо.

ОБНОВИТЬ:

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

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

В Chrome отображает «ab» при рассмотрении исходного кода. Но Firefox отображает его завершено ... так же, как можно обмануть хром;)

Спасибо!!!

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

Это было полезно?

Решение

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

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

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

&lt; &gt;

вместо.

Другие советы

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

<?name?> !! При отображении на HTML результаты результатов в !!

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

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

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

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

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

htmlspecialchars заменит:

  • & с &
  • " с "
  • <с <
  • с>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top