Как экранировать символ '<' для использования в команде php echo [закрыто]

Мой веб-сервер выводит результат комбо фортуна/козерог. Мой php скрипт похож на этот:

<?php
$output = shell_exec('/var/www/bin/fortune -a -o -s | /var/www/bin/cowsay -f eyes');

echo "<pre>$output</pre>";

Однако этот конкретный файл с коровами создает проблему. Вместо этого результата, полученного с помощью консоли:

 __________________________________
/ You will overcome the attacks of \
\ jealous associates.              /
 ----------------------------------
    \
     \
                                   .::!!!!!!!:.
  .!!!!!:.                        .:!!!!!!!!!!!!
  ~~~~!!!!!!.                 .:!!!!!!!!!UWWW$$$ 
      :$$NWX!!:           .:!!!!!!XUWW$$$$$$$$$P 
      $$$$$##WX!:      .<!!!!UW$$$$"  $$$$$$$$# 
      $$$$$  $$$UX   :!!UW$$$$$$$$$   4$$$$$* 
      ^$$$B  $$$$\     $$$$$$$$$$$$   d$$R" 
        "*$bd$$$$      '*$$$$$$$$$$$o+#" 
             """"          """"""" 

выводится следующая страница:

 ________________________________________
< You have taken yourself too seriously. >
 ----------------------------------------
    \
     \
                                   .::!!!!!!!:.
  .!!!!!:.                        .:!!!!!!!!!!!!
  ~~~~!!!!!!.                 .:!!!!!!!!!UWWW$$$ 
      :$$NWX!!:           .:!!!!!!XUWW$$$$$$$$$P 
      $$$$$##WX!:      .

Я попытался использовать str_replace для вставки chr(60), но не добился успеха.

Как сделать php скрипт устойчивым ко всем текстовым символам?

1
задан 20 December 2015 в 05:10

1 ответ

Можно использовать функцию PHP htmlentities для замены любых специальных символов HTML с помощью символов ESC HTML.
Для использования его Вы изменили бы Вас код, чтобы выглядеть примерно так:

<?php
$output = shell_exec('/var/www/bin/fortune -a -o -s | /var/www/bin/cowsay -f eyes');

$encoded = htmlentities($output);
echo "<pre>", $encoded, "</pre>";

Согласно этому демонстрация - http://codepad.viper-7.com/VZOI5u

Объяснение

Каждый раз, когда вывод PHP содержит символы как <, webrowser (правильно) предположит свой HTML - например, браузер примет эти <, начало последовательности кода HTML как <b>hello</b>.
функция htmlentities заменит те специальные символы escape-последовательностями - который браузер знает для простого отображения, чтобы экранировать и не интерпретировать как являющийся "специальными" символами HTML. так, например <b>hello</b> становится &lt;b&gt;hello&lt;/b&gt;

1
ответ дан 7 December 2019 в 16:04

Другие вопросы по тегам:

Похожие вопросы: