gpt4 book ai didi

php - Simplexml_load_string() 无法解析错误

转载 作者:可可西里 更新时间:2023-11-01 12:24:02 32 4
gpt4 key购买 nike

我正在尝试加载解析 Google Weather API 响应(中文响应)。

Here是 API 调用。

// This code fails with the following error
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=11791&hl=zh-CN');

( ! ) Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xB6 0xE0 0xD4 0xC6 in C:\htdocs\weather.php on line 11

为什么加载此响应失败?

如何编码/解码响应以便 simplexml 正确加载它?

编辑:这是代码和输出。

<?php
$googleData = file_get_contents('http://www.google.com/ig/api?weather=11102&hl=zh-CN');
$xml = simplexml_load_string($googleData);

( ! ) Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xB6 0xE0 0xD4 0xC6 in C:\htdocs\test4.php on line 3 Call Stack Time Memory Function Location 1 0.0020 314264 {main}( ) ..\test4.php:0 2 0.1535 317520 simplexml_load_string ( string(1364) ) ..\test4.php:3

( ! ) Warning: simplexml_load_string() [function.simplexml-load-string]: t_system data="SI"/>

( ! ) Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\htdocs\test4.php on line 3 Call Stack Time Memory Function Location 1 0.0020 314264 {main}( ) ..\test4.php:0 2 0.1535 317520 simplexml_load_string ( string(1364) ) ..\test4.php:3

最佳答案

这里的问题是 SimpleXML 不查看 HTTP header 来确定文档中使用的字符编码,并且简单地假设它是 UTF-8,即使 Google 的服务器确实将其公布为

Content-Type: text/xml; charset=GB2312

您可以编写一个函数,使用 super secret 的魔法变量 $http_response_header 查看该 header ,并相应地转换响应。类似的东西:

function sxe($url)
{
$xml = file_get_contents($url);
foreach ($http_response_header as $header)
{
if (preg_match('#^Content-Type: text/xml; charset=(.*)#i', $header, $m))
{
switch (strtolower($m[1]))
{
case 'utf-8':
// do nothing
break;

case 'iso-8859-1':
$xml = utf8_encode($xml);
break;

default:
$xml = iconv($m[1], 'utf-8', $xml);
}
break;
}
}

return simplexml_load_string($xml);
}

关于php - Simplexml_load_string() 无法解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899274/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com