htmlspecialchars“禁止代码点”验证错误

时间:2017-05-19 00:20:06

标签: php html5 encoding character-encoding w3c-validation

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

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

在通过HTML5验证器运行文档时,有没有办法将这些类型的字符串回显到浏览器而不会出现“禁止代码点”?

我尝试了以下内容:

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

但所有这些表达式仍会导致“禁止代码点”错误。网页的编码已通过元标记设置为UTF-8:

<meta charset="UTF-8">

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

对我有用的解决方案是:

htmlspecialchars($string, ENT_SUBSTITUTE | ENT_DISALLOWED);

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