simplexml_load_string-由于有效负载中的Unicode字符而导致分析错误

时间:2018-09-01 12:24:43

标签: php unicode simplexml-load-string

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

我不知如何获得php来阅读它并像往常一样使用xml。在人们对提交的数据富有创意之前,该代码一直运行良好。

不幸的是,我无法修改源数据,我必须处理收到的数据,以便给您一个主意,在原始原始收据中打破该字段的字段看起来像这样:

<FirstName></FirstName>

以前,代码可以通过以下简单行来解析xml:

$xmlresult = simplexml_load_string($result, 'SimpleXMLElement',LIBXML_NOCDATA);

但是,使用这些unicode字符,只会出错。 如果我转储原始有效负载,则取决于查看数据的方式:

 <d83d><dc3a>

<U+D83D><U+DC3A>

在堆栈上阅读一些内容,看来DOM可能有效,但也没有运气。

传入的有效负载确实具有标头:

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

数据通过

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

我完全不知所措,希望可以在这里得到一些帮助,以使我摆脱这种处理数据的难题。

1 个答案:

答案 0 :(得分:0)

我已经盯着看了好几天了,看来我没有尝试过的一件事就是用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: ????

也设置了表格类型:    FirstName varchar(40)收集utf8mb4_unicode_ci NOT NULL,

这可能表明他们可能没有将utf8_encoding的输出编码到csv中,这与该问题无关,但很有趣。

最后,我的脚本能够再次运行!