【问题标题】:How do you remove illegal characters from an xml file?如何从 xml 文件中删除非法字符?
【发布时间】:2010-12-27 17:51:34
【问题描述】:

我正在使用 PHP SimpleXML 方式在我的服务器上处理 XML 文件。我只需要阅读XML的内容(我不需要修改它)所以我坚持使用简单易用的SimpleXML。但是 SimpleXML 在读取某个 XML 文件时遇到问题,因为它有一些非常奇怪的字符。我收到以下错误:

警告:simplexml_load_file() [function.simplexml-load-file]: data/data.xml:348: parser error : PCDATA invalid Char value 3 in C:\xampp\htdocs\VMP\xintel\analyzer.php on第 54 行

警告:simplexml_load_file() [function.simplexml-load-file]:Jardin al fte。 Hall de recepcion,放大生活喜剧演员。第 54 行 C:\xampp\htdocs\VMP\xintel\analyzer.php 中的 ocina comedor diario c

我无法控制 XML 文件中的内容,因此我无法阻止将这些字符添加到文件中。另外,我不知道如何解决这个问题。该文件应该以 utf-8 编码。所以我尝试了从 UTF-8 解码到 ISO-8859-1 以及相反的方法,但没有任何反应。

有人可以帮帮我吗?我应该尝试更改编码吗?我应该尝试删除这些字符吗?有什么事吗?

编辑:stangre 字符都是画框字符(参见:http://en.wikipedia.org/wiki/Box-drawing_characters

【问题讨论】:

  • 如果文件包含非法的 XML 字符,那么它就不是 XML 文件,使用 XML 解析器也无济于事。
  • 嗯,我可以看到非法字符导致 xml 解析器崩溃。

标签: xml encoding character-encoding


【解决方案1】:

也许您可以通过Tidy 传递输入以使其格式正确。将文件提供给 SimpleXML 之前的简单预处理步骤。

例如,tidy::repairFile 看起来很有希望。

【讨论】:

    【解决方案2】:

    通常 XML 文件的所有字符都会被解释,除非它们进入 CDATA 部分 => link text

    如果不是这样,您的 XML 无效。

    【讨论】:

    • 问题是当一个无效的XML文件不在你的控制之下时如何处理它。
    • 我可以肯定地说,xml 中的所有文本都放在 CDATA 块中。所以所有这些字符都可以在 CDATA 中找到。
    • 嗯,是的,但是就像我在之前的评论中所说,我什至无法粘贴奇怪的字符。
    • 您无法在某处提供文件?
    【解决方案3】:

    我有一个应用程序从不受信任的来源接收 XML,其中许多向我发送未编码的 & 符号。为了解决这个问题,我有一个中间过滤器,它执行一次线性传递并在必要时去除/编码字符。我不知道这对你来说是否可行,但我认为这是一个非常合理的解决方案。

    【讨论】:

    • 好的,我明白你在说什么。但我不知道该怎么做。您的应用是否更改了编码,或者它实际上是否用字符编码替换了有问题的字符?
    • 对不起,当我说“编码”时,我指的不是字符集。例如,在原始 & 符号的情况下,它将被替换为 & -- 然后,您需要确保此 & 符号不是有效编码的一部分,或者在处理完成后进行解码。
    • 我想这就是我要做的。最好的方法是重新编码整个 xml 文件,以便将来脚本在遇到我无法检查的字符时不会崩溃。
    • 当然,这个过滤步骤不必完全在内存中完成。您可以覆盖磁盘上的 XML。
    猜你喜欢
    • 2018-04-30
    • 2012-05-25
    • 2015-03-22
    • 2015-05-12
    • 2010-09-13
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多