Мой веб-сервер выводит результат комбо фортуна/козерог. Мой 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 скрипт устойчивым ко всем текстовым символам?
Можно использовать функцию 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>
становится <b>hello</b>