如何转义'

如何转义'

我的网络服务器输出 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>变成&lt;b&gt;hello&lt;/b&gt;

相关内容