如何在PHP中解析RSS非XML feed?

时间:2014-05-22 10:41:39

标签: php xml xml-parsing rss simplexml

我使用PHP的simplexml_load_file解析了大量的RSS提要,它就像一个魅力。 现在我正在努力为英国“金融时报”的RSS源做同样的事情。我什么时候......

$rss = simplexml_load_file("http://www.ft.com/rss/world");

......我明白了:

Warning: simplexml_load_file(): http://www.ft.com/rss/world:11: parser error : Opening and ending tag mismatch: link line 8 and head in rss.php on line 6

Warning: simplexml_load_file(): oat:left;margin-right:20px;margin-top:3px;width:35px;height:31px;}</style></head in rss.php on line 6

Warning: simplexml_load_file(): ^ in rss.php on line 6

Warning: simplexml_load_file(): http://www.ft.com/rss/world:37: parser error : Opening and ending tag mismatch: input line 37 and li in rss.php on line 6

Warning: simplexml_load_file(): ^ in rss.php on line 6

以及更多警告(大约100个)。

我搜索了Stackoverflow的答案,但我找不到任何似乎适用于这种情况的内容。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

要使某些网站正常工作,您需要使用HTTP请求设置用户代理。由于PHP中的默认值可能为空(这似乎是隐私明智的设置),您需要为请求设置它:

ini_set('user_agent', "Godzilla/42.4 (Gabba Gandalf Client 7.3; C128; Z80) Lord of the RSS Weed Edition (KHTML, like Gold Dust Day Gecko) Chrome/97.0.43043.0 Safari/1337.42");

$rss = simplexml_load_file("http://www.ft.com/rss/world");

答案 1 :(得分:0)

您的代码在这里适合我。尝试省略LIBXML_NOWARNING & LIBXML_NOERROR(可以抑制您可能遇到的任何错误),看看它出错了。