php - 如何清理包含有效 UTF8 字符的 XML 属性的表单字段?

标签 php xml sanitization

我已经为此苦苦挣扎了一段时间。我有一个多语言网络应用程序,它会在某个时候输出 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="&bull;"><![CDATA[ &bull; ]]> </foo>

任何验证器都会提示 bull 不是属性中的实体。如果删除该属性,它将有效。我还听说模式是可行的方法,所以如果可以实现类似上述但使用 XML 模式的东西,那就太棒了。

谢谢!

最佳答案

这是有效的

<?xml version="1.0" ?> 
<!DOCTYPE foo [
  <!ELEMENT foo EMPTY>
  <!ATTLIST foo a CDATA #REQUIRED>
]>
<foo a="&amp;bull;"><![CDATA[ &bull; ]]> </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/

相关文章:

使用 Wiremock 进行 XML 匹配

javascript - 我应该读/写 XML 文件以将数据保存在本地 Chrome 扩展程序中吗?

java - Struts2 xml-验证调用方法

php - PHP 中用户提供的正则表达式的清理

php Laravel 只允许连续最多两个换行符

php - 如何使用 PHP 允许 HTML 进入白名单

php - 如何通过调用 codeigniter Controller 函数来更改配置项值?

php - 自动调整缩略图在 DIV 中的位置(基于浏览器窗口宽度)?

php - 获取列总和的SQL

php - FPDF/FPDI 错误 : Fatal error: Class 'setasign\Fpdi\FpdfTpl' not found in