我有下面的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 顶部没有设置任何编码。上面的代码正在输出 XML 错误:浏览器上第 1008 行的字符无效。
<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>
我认为这可能是由于省略号,因为当我将返回的 xml 保存在记事本++的本地文件中,然后输入该 xml 文件时,上述解析器运行良好。
我想直接从 url 运行此 xml,而不是将其保存到目录中,因为这将是我不需要的开销。谢谢
确保您从中提取文件的 Web 服务器在为页面提供服务时发送了正确的字符编码。您应该在响应标头中看到类似以下内容:
Content-Type:"text/xml; charset=utf-8"
当您直接请求 XML 文件时,可以在任何现代浏览器中的检查器的网络面板中查看标头。
还应在文件本身中指定编码。第一行应如下所示:
<?xml encoding='UTF-8'?>
如果这些失败,您可以随时尝试使用 utf8_decode()
,这是一个XML_Parser函数,将尝试将数据转换为 iso-8859-1。