我有一个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>
我完全不知所措,希望可以在这里得到一些帮助,以使我摆脱这种处理数据的难题。
答案 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中,这与该问题无关,但很有趣。
最后,我的脚本能够再次运行!