我的网络服务器输出 fortune/cowsay 组合的结果。我的 php 脚本与此类似:
<?php
$output = shell_exec('/var/www/bin/fortune -a -o -s | /var/www/bin/cowsay -f eyes');
echo "<pre>$output</pre>";
但是这个特定的 cow 文件存在一个问题。控制台得到的结果与此相反:
__________________________________
/ 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
您可以使用 PHP 函数html实体使用 HTML 转义字符替换任何 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 输出包含字符时,<
浏览器就会(正确地)假定其为 HTML - 例如,浏览器会假定<
是 HTML 代码序列的开头,如。htmlentities<b>hello</b>
函数
会将这些特殊字符替换为转义序列 - 浏览器知道只需将其显示在屏幕上,而不会将其解释为“特殊”HTML 字符。例如<b>hello</b>
变成<b>hello</b>