Par*_*ris 6 php xml sanitization
我一直在努力解决这个问题.我有一个多语言的Web应用程序,在某些时候输出XML.这个XML可以包含任何语言,因此我的清理方法是禁止某些破坏XML的字符被插入.我尽可能多地在CDATA中包装,但我在属性中有很多内容.我不想禁用特殊字符,因为括号,句号,短划线,刻度和撇号等完全有效的字符始终使用并且它们起作用.
去除所有会破坏XML属性的字符的最佳方法是什么,但保留语言完整?
更新:
我发现:http://en.wikipedia.org/wiki/CDATA#CDATA-type_attribute_value,它向我表明我可以使用DTD将属性描述为CDATA部分; 然而,这似乎并非如此.
<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ELEMENT foo EMPTY>
<!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="•"><![CDATA[ • ]]> </foo>
Run Code Online (Sandbox Code Playgroud)
任何验证者都会抱怨公牛不是该属性中的实体.如果删除该属性,它将有效.另外我听说模式是要走的路,所以如果像上面这样的东西是可能的,而是使用XML Schema,那就太棒了.
谢谢!
这是有效的
<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ELEMENT foo EMPTY>
<!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&bull;"><![CDATA[ • ]]> </foo>
Run Code Online (Sandbox Code Playgroud)
您可以将特殊字符转换为 html 实体
htmlentities($str);
Run Code Online (Sandbox Code Playgroud)
并反转
html_entity_decode($str);
Run Code Online (Sandbox Code Playgroud)
请参阅: http: //www.php.net/manual/en/function.htmlentities.php
另请参阅“html 元字符”