我试图以 html 编码的方式输出一个字符串,并且 htmlentities()
function总是返回一个空字符串。
我很清楚为什么会这样。好吧,我没有运行 PHP 5.4 我安装了最新的 PHP 5.3 版本。
问题是我将如何对具有无效代码单元序列的字符串进行 htmlencode。
根据手册,ENT_SUBSTITUTE
是要走的路。但是这个常量在 PHP 5.3.X 中没有定义。
我这样做了:
if (!defined('ENT_SUBSTITUTE')) {
define('ENT_SUBSTITUTE', 8);
}
仍然没有运气。 htmlentities
仍然返回空字符串。
我想试试 ENT_DISALLOWED
,但找不到它对应的 long 值。
所以我的问题有两个问题
PHP 5.4 的
ENT_DISALLOWED
的常量值是多少?如何确保可以从中清除包含非 UTF-8 字符(例如 smart quotes )的字符串? - 不仅是智能引号,还有任何导致
htmlentities()
返回空白字符串的内容。
最佳答案
确实 PHP 5.3 中的 htmlentities()
没有 ENT_SUBSTITUTE
标志,但是它有(不是真的建议)ENT_IGNORE
旗帜。请注意注释并在使用前尝试理解它:
Using this flag is discouraged as it » may have security implications.
您最好先了解输入字符串出现问题的原因。大多数情况下,用户只是缺少指定正确的编码。
例如首先将字符串重新编码为 UTF-8,然后将其传递给 htmlspecialchars()
或 htmlentities()
。说到智能引号,您可能正在使用 Windows-1252 编码字符串。您甚至不需要在使用前进行转换,只需正确指定字符集即可 (PHP 5.3):
htmlentities($string, ENT_QUOTES, $encoding = 'Windows-1252');
当然,这仅适用于 如果 输入 $string
在 Windows-1252 (CP1252) 中编码。先找出正确的编码,一般就没问题了。对于不支持的编码,首先重新编码为支持的编码,例如 iconv或 mb_string .
关于php - 在 htmlentities 中使用 php 5.4 的新常量 ENT_DISALLOWED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468786/