我有以下php代码从url解析xml
$parser=xml_parser_create();
function char($parser,$data)
{
echo $data;
}
xml_set_character_data_handler($parser,"char");
$fp=fopen("http://example.com","r");
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
上面的fopen调用返回的xml是这样的.Xml没有任何编码设置在顶部。 上面的代码在浏览器的第1008行输出XML错误:无效字符。
<entries> //root element
<entry>
<TITLE><![CDATA[xxxx yyyyyyyyyy]]></TITLE>
</entry>
<entry>
<TITLE><![CDATA[xxxx Gold… yyyyyyyyyy]]></TITLE>//this is line no 1008 that returns invalid character error and script stops
</entry>
</entries>
我认为这可能是由于省略号,因为当我在notepad ++中保存本地文件中返回的xml然后提供该xml文件时,上面的解析器运行良好。
我想直接从url运行此xml而不是将其保存到目录中,因为这将是我不需要的开销。谢谢
答案 0 :(得分:0)
确保从中提取文件的Web服务器在为页面提供服务时发送正确的字符编码。您应该在响应标头中看到类似的内容:
Content-Type:"text/xml; charset=utf-8"
当您直接请求XML文件时,可以在任何现代浏览器中在检查器的网络面板中查看标题。
您还应该在文件本身中指定编码。第一行看起来像这样:
<?xml encoding='UTF-8'?>
如果这些失败,您可以尝试使用utf8_decode()
这是一个XML_Parser函数,它将尝试将数据转换为iso-8859-1。