处理包含无效字符 (PHP) 的 XML 的最佳方法是什么?


What is the best way to deal with XML that contains invalid characters (PHP)?

我正在使用QBXML与Quickbooks集成。我正在运行客户查询,并且 Quickbooks 返回的 XML 似乎包含无效字符 (!)。

查看 quickbooks 返回的源 XML,我可以看到无效字符(出于隐私原因,实际名称已更改,但我保留了有问题的字符):

<Contact>Ongél Davabond</Contact>

当我尝试解析XML(使用PHP XML解析器,以xml_parser_create()开头)时,我收到一条无效的字符消息。

我注意到XML标头只是:

<?xml version="1.0" ?>

我尝试preg_replacing

<?xml version="1.0" encoding="utf-8" ?>

但这没有任何区别。

鉴于我无法更改接收 XML 的方式,我该如何最好地处理它?有没有办法让 PHP XML 解析器接受这样的字符?PHP 是否有办法将任何无效字符转换为它们的 &#nnn;等效项,而不影响 XML 结构,还是我需要逐个字符遍历整个 XML 字符以查找无效字符并手动替换它们?我不知道将来会出现哪些其他无效字符,所以我正在寻找一种一次性处理所有可能性的方法,而不仅仅是修复这个"é"字符。

虽然我期待 UTF-8,但返回的 XML 是 ISO-8859-1。强制 ISO-8859-1 编码解决了这个问题。