我通过PHP回声发送XML文档来响应AJAX调用.为了形成这个XML文档,我遍历数据库的记录.问题是数据库包含其中包含"<"符号的记录.很自然地,浏览器会在该特定位置抛出错误.怎么解决这个问题?
Art*_*cto 65
通过htmlspecialchars使用库来构建XML文档(例如DOMDocument或XMLWriter),或者更合适地使用库来转义这些字符.
另一种选择是使用CDATA部分,但是你必须注意事件的发生]]>.
还要考虑到您必须遵守为XML文档定义的编码(默认为UTF-8).
use*_*662 62
从PHP 5.4开始,您可以使用:
htmlspecialchars($string, ENT_XML1);
Run Code Online (Sandbox Code Playgroud)
您应该指定编码,例如:
htmlspecialchars($string, ENT_XML1, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
请注意,上面只会转换:
& 至 &< 至 <> 至 >如果要转义文本以在双引号括起的属性中使用:
htmlspecialchars($string, ENT_XML1 | ENT_COMPAT, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
将转换"至"除&,<和>.
如果您的属性用单引号括起来:
htmlspecialchars($string, ENT_XML1 | ENT_QUOTES, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
将转换'至'除&,<,>和".
(当然你甚至可以在属性之外使用它).
1)您可以将文本包装为CDATA,如下所示:
<mytag>
<![CDATA[Your text goes here. Btw: 5<6 and 6>5]]>
</mytag>
Run Code Online (Sandbox Code Playgroud)
请参阅http://www.w3schools.com/xml/xml_cdata.asp
2)已经有人说:逃避那些角色.例如:
5<6 and 6>5
Run Code Online (Sandbox Code Playgroud)
试试这个:
$str = htmlentities($str,ENT_QUOTES,'UTF-8');
Run Code Online (Sandbox Code Playgroud)
因此,在使用htmlentities()函数过滤数据后,您可以使用XML标记中的数据,如:
<mytag>$str</mytag>
Run Code Online (Sandbox Code Playgroud)
If at all possible, its always a good idea to create your XML using the XML classes rather than string manipulation - one of the benefits being that the classes will automatically escape characters as needed.
添加这个以防它对某人有帮助。
由于我正在使用日语字符,因此编码也已适当设置。然而,我有时发现这htmlentities还htmlspecialchars不够。
某些用户输入包含上述函数未去除的特殊字符。在这些情况下我必须这样做:
preg_replace('/[\x00-\x1f]/','',htmlspecialchars($string))
Run Code Online (Sandbox Code Playgroud)
这还将删除某些xml-unsafe控制字符,例如Null character或EOT。您可以使用此表来确定要省略哪些字符。
| 归档时间: |
|
| 查看次数: |
88859 次 |
| 最近记录: |