simplexml_load_string - 由于负载中的 unicode 字符导致解析错误

simplexml_load_string - parse error due to unicode characters in payload

我有一个问题 simplexml_load_string 由于来自数据库的 xml 有效负载出现解析错误,其中包含 unicode 字符。

我不知道如何让 php 阅读这篇文章并像往常一样使用 xml。在人们对提交的数据产生创意之前,代码一直运行良好。

不幸的是,我无法修改源数据,我必须处理收到的数据,给你一个想法,原始原始收据中破坏它的一个字段看起来像:

<FirstName></FirstName>

以前,通过使用简单的一行 :

解析 xml,代码工作正常
$xmlresult = simplexml_load_string($result, 'SimpleXMLElement',LIBXML_NOCDATA);

但是对于这些 un​​icode 字符,它只是错误。 根据我用来查看数据的内容,如果我转储原始有效负载,它可能看起来像:

 <d83d><dc3a>

<U+D83D><U+DC3A>

在堆栈上读了一点,似乎 DOM 可能有效,但也没有任何运气。

传入的有效载荷确实有 header:

?xml version="1.0" encoding="UTF-8"?>

数据来自

<data type="cdata"><![CDATA[<payload>

我完全不知所措,希望能在这里得到一些帮助,让我度过这个数据处理的难关。

我已经盯着这个看好几天了,似乎我没有尝试的一件事是用 utf8_encode 包装我的 curl 调用函数,如下所示:

    $result = utf8_encode(do_curl($xmlbuildquery));

我的do_curl函数只是一个调用curl过程的单独函数,仅此而已。 这样做,我能够解析结果,而不是显示那些 unicode 字符,而是显示为

[firstname] => 🐺

(以上是print_r($result)的结果;在
之后 $xmldata = simplexml_load_string((string)$xmlresult->body->function->data);

有了它,xml 现在终于可以解析了。奇怪的是,这进一步激发了我的好奇心,因为这些信息是通过导入 mysql 数据库的 csv 提供的,当我查找相同的记录时,它显示为:

 FirstName: ????

也设置了 table 类型: FirstName varchar(40) 整理 utf8mb4_unicode_ci 不为空,

这可能表明他们不是 utf8_encoding csv 的输出,与这个问题分开但很有趣。

最后,我的脚本又可以运行了!!