【发布时间】:2011-10-21 21:35:09
【问题描述】:
我正在使用 XHTML 过渡文档类型在浏览器中显示内容。但是,显示的内容是通过 XML 解析器 (DOMDocument) 传递的,以便在输出到浏览器之前进行最后的润色。
我为我的网站使用定制设计的 CMS,它允许我对网站进行更改。我有一个模块,它允许我以类似于 WordPress 小部件的方式在我的网站上显示 HTML 脚本。
我现在面临的问题是我需要确保通过此模块提供的任何代码都应采用有效的 XHTML 格式,否则模块将需要将代码转换为有效的 XHTML。目前,如果输入代码的一部分不符合 XHTML,那么我的 XML 解析器会中断并抛出警告。
我正在寻找一种解决方案,该解决方案对 URL 中存在的实体和通过 TextArea 控件提供的输入的文本部分进行编码。例如下面的字符串会破坏解析器给出实体引用错误:
<script type="text/javascript" src="http://www.abcxyz.com/foo?bar=1&sumthing"></script>
以下行也会导致同样的错误:
<a href="http://www.somesite.com">Books & Cool stuff<a/>
附:如果我使用htmlentities 或htmlspecialchars,它们还会转换标签的尖括号,这不是必需的。我只需要对字符串的 url 和文本部分进行转义/编码。
任何帮助将不胜感激。
感谢和问候, 瓦卡尔穆斯塔克
【问题讨论】:
-
先用Tidy对其进行标准化。
-
解决 XML 转义问题的正确方法是 facebook.com/notes/facebook-engineering/… - 但这是相当不标准的。因此,要保持输出 XHTML 语法兼容(即使您实际上使用错误的 MIME 类型发送它),实际上就是通过 libtidy 进行管道传输。
-
感谢“hakre”你拯救了我的一天。整洁的性能有效吗?
标签: php xml-parsing html-entities htmlspecialchars