XML 错误: 无效字符


XML Error: Invalid character

我有下面的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。