我已经为此苦苦挣扎了一段时间。我有一个多语言网络应用程序,它会在某个时候输出 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>
任何验证器都会提示 bull 不是属性中的实体。如果删除该属性,它将有效。我还听说模式是可行的方法,所以如果可以实现类似上述但使用 XML 模式的东西,那就太棒了。
谢谢!
最佳答案
这是有效的
<?xml version="1.0" ?>
<!DOCTYPE foo [
<!ELEMENT foo EMPTY>
<!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&bull;"><![CDATA[ • ]]> </foo>
您可以将特殊字符转换为 html 实体
htmlentities($str);
和反转
html_entity_decode($str);
参见:http://www.php.net/manual/en/function.htmlentities.php
另请参阅“html 元字符”
关于php - 如何清理包含有效 UTF8 字符的 XML 属性的表单字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743473/