为什么PHP SimpleXML不能忽略错误并加载文件?

时间:2014-01-27 12:28:02

标签: php simplexml

当它有一些语法问题时,根本不加载XML文件有什么意义?今天我在加载定义了错误编码的文件时遇到了问题。它有UTF-16个标头,但在UTF-8中编码。我理解,如果它无法确定正确的编码,但它会抛出警告,文件被UTF-8编码,所以它确实知道该怎么做......这是一个理论问题。无需提供任何示例或说出我尝试过的内容。我知道如何加载文件。只需将encoding="UTF-16"更改为encoding="UTF-8" ...但为什么会出现这样的问题? UTF-8UTF-16中的每个语法字符都完全相同... C#库甚至不关心......

2 个答案:

答案 0 :(得分:5)

正如我从围绕XML设计时的讨论中回忆的那样,这种零容忍方法是XML设计者对HTML的哲学回应。在看到响应大量破碎的HTML而出现的令人难以置信的巴洛克式错误恢复时,XML的设计者决定强制要求任何错误都是致命的。

这当然对内容作者来说不方便,内容作者必须确保他们的文档格式正确,并且在必要时也是有效的。但通过这样做,他们允许XML库作者专注于仅按指定实现XML,而不是容纳破碎的XML,无论中断多小。总的来说,我认为这是一个非常聪明的举动,导致专注于精益,快速的图书馆,而不是臃肿,适应的。

答案 1 :(得分:1)

您的抱怨来自于编码信息实际上是多余的假设,并且有一种可靠的方法来检测任何给定文本的编码。那是错的。

任何进行编码检测的软件(通常是一个好的文本编辑器都可以在加载文件时执行)基本上是在猜测。这在以下情况下是可以接受的:

  • 没有其他办法可以做到这一点
  • 不能造成严重伤害
  • 某人将审核结果

自动XML处理无法满足任何这些要求。

您基本上要求将数据丢失作为一项功能。已针对此明确设计了XML。

(如果您正确使用它们,您可能在C#库中发现了一个错误。)