htmlspecialchars "Forbidden code point" 验证错误

htmlspecialchars "Forbidden code point" validation error

我的 php 脚本从 MySQL table 中获取包含如下字符串的行:

$string = 'ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨';

当 运行 文档通过 HTML5 验证器时,有没有办法在不获取 "Forbidden code point" 的情况下将这些类型的字符串回显到浏览器?

我试过以下方法:

htmlspecialchars($string);
htmlspecialchars($string, ENT_SUBSTITUTE, 'UTF-8');
htmlspecialchars($string, ENT_DISALLOWED, 'UTF-8');
htmlspecialchars(mb_convert_encoding($string, 'UTF-8');

但所有这些表达式仍然会导致 "Forbidden code point" 错误。网页的编码已通过元标记设置为 UTF-8:

<meta charset="UTF-8">

PHP 函数 htmlentities() 可能就是您要找的。 此函数会将提供给它的适用字符转换为 HTML 个实体。

例如:

$string = 'ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨'; $string = htmlentities($string); echo $string;

会将您的 ï¼’ã¤ã®ä¹³é…¸èŒã®ç¨ 字符串转换为 &iuml;&frac14;&rsquo;&atilde;&curren;&atilde;&reg;&auml;&sup1;&sup3;&eacute;&hellip;&cedil;&egrave;&OElig;&atilde;&reg;&ccedil;&uml;uml;,可用于在 HTML 页面上显示而不会出错。

有关此功能的更多信息可在此处找到:https://secure.php.net/manual/en/function.htmlentities.php

对我有用的解决方案是:

htmlspecialchars($string, ENT_SUBSTITUTE | ENT_DISALLOWED);

这会将尽可能多的字符转换为 UTF-8,并删除所有其他字符。