XML错误:字符无效

时间:2014-10-19 07:12:53

标签: php xml

我有以下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而不是将其保存到目录中,因为这将是我不需要的开销。谢谢

1 个答案:

答案 0 :(得分:0)

确保从中提取文件的Web服务器在为页面提供服务时发送正确的字符编码。您应该在响应标头中看到类似的内容:

Content-Type:"text/xml; charset=utf-8"

当您直接请求XML文件时,可以在任何现代浏览器中在检查器的网络面板中查看标题。

您还应该在文件本身中指定编码。第一行看起来像这样:

<?xml encoding='UTF-8'?>

如果这些失败,您可以尝试使用utf8_decode()这是一个XML_Parser函数,它将尝试将数据转换为iso-8859-1。