【问题标题】:Should I keep the value of a node in a xml inside a <! [CDATA []] if it contains special characters?我应该将节点的值保留在 <! [CDATA []] 是否包含特殊字符?
【发布时间】:2014-05-03 13:30:54
【问题描述】:

我正在创建一个 DOMDocument。

问题很简单,我有一个 XML 有一个节点名称 &lt;productName&gt;

如果我想创建一个 xml 并且值包含像 çøðé&amp; 这样的特殊字符,我无法创建 xml,因为应用程序会抛出异常

"未终止的实体引用çøðé"

但我知道问题出在 char "&amp;",我应该怎么做,将 char 编码为 &amp;amp; 并解码它,如果我想绘制值或者我应该在 &lt;! [CDATA []] 中设置值

谢谢。

【问题讨论】:

  • 在构建 XML 时尝试使用$node-&gt;appendChild($doc-&gt;createTextContent('&amp;çøðé')) - 这将正确转义任何特殊字符。

标签: php xml encoding domdocument cdata


【解决方案1】:

&amp;amp; 将是执行此操作的正确方法,然后您必须在导入 xml 文档或在代码中自动解码时手动编辑它。 CData 的问题在于,如果您使用的是 XML 解析器库(我强烈建议您使用它,尤其是在您有大文件的情况下),它将不会被解析。

资料来源:我在一家出版公司工作。他们会收到带有不正确字符的 XML 文件,我必须检查文件并删除 XML 中的无效字符并用其他字符替换它们。不幸的是,有时这是一项漫长而乏味的任务。您必须确保向您发送 XML 文件的人不包含无效字符,如果是,您可能不得不自己检查文件并删除它们。您可以通过编写一个 java 程序为您删除字符来做到这一点,但问题是,它可能无法捕获所有无效字符。如果您捕获异常,大多数时候您应该能够查看异常并通过您使用的解析器查看无效字符的位置,并且它可能包括该无效字符的字节码。我建议您使用 TextPad 查找无效字符,因为您可以按字节搜索,并且可以找到在其他文本编辑器中看不到的“隐藏”字符。

您可能还会遇到一些文件太大而无法打开的情况。在这种情况下,您必须拆分文件才能查看它们(如果您正在创建自己的 XML 结构,您很可能需要创建自己的 XML 拆分器)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2016-08-24
    • 2013-06-13
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多