RSS阅读器错误:使用simplexml_load_file()时输入不正确UTF-8

时间:2010-07-15 16:15:34

标签: utf-8 rss character-encoding

我正在使用simplexml_load_file方法解析来自外部源的提要。

我的代码就像这样

$ rssFeed ['DAILYSTAR'] ='http://www.thedailystar.net/latest/rss/rss.xml'; $ rssParser = simplexml_load_file($ url);

输出如下:

警告:simplexml_load_file()[function.simplexml-load-file]:http://www.thedailystar.net/latest/rss/rss.xml:12:解析器错误:输入不正确UTF-8,表示编码!字节:第39行的C:\ xampp \ htdocs \ googlebd \ index.php中的0x92 0x73 0x20 0x48

最终因致命错误而停止。主要问题是网站的字符编码是ISO-8859-1,而不是UTF-8。

我可以使用此方法(SimpleXML API)读取此内容吗? 如果没有,则可以使用任何其他方法? 我搜索了谷歌,但没有回答。我应用的每个方法都会返回此错误。

谢谢, 拉希德

2 个答案:

答案 0 :(得分:0)

好吧,当我使用Python检索此内容时,我得到以下内容:

'\n<rss version="2.0" encoding="ISO-8859-1">\n [...]
<description>The results of this year\x92s Higher Secondary Certificate 

现在它它是ISO-8859-1,但\ x92不在该字符集中,而是在Windows-1252中用作撇号的结束卷曲单引号。因此页面会抛出编码错误,并且根据XML规范,客户端应该是“严格的”而不是修复错误。

您可以检索它,并以某种方式过滤掉非ISO-8859-1字符,或者更好,在将结果传递给RSS解析器之前,使用mb-convert-encoding()转换编码。

哦,如果你想把结果合并到一个UTF-8页面,你可能已经把所有东西都转换成了UTF-8,虽然这是英文,甚至可能都不需要任何不同的字符编码,如果一切都变成了毕竟是ASCII。

答案 1 :(得分:0)

我们遇到了同样的问题,并使用utf8_encode将编码从ISO-8859-1 / latin-1更改为UTF-8并超过错误。

$contents = file_get_contents($url);
simplexml_load_string(utf8_encode($contents));