从另一个页面加载xml


Load xml from another page

我正在尝试加载此页面https://developers.facebook.com/blog/feed在我的网站上没有运气。我正在使用这个代码

<?php
$xml = simplexml_load_file('https://developers.facebook.com/blog/feed/');
   print_r($xml);
?>

但是我有很多像这样的错误

警告:simplexml_load_file()[function.simplexml加载文件]:https://developers.facebook.com/blog/feed/:10:分析器错误:xmlParseEntityRef:第2行的/fb_feed/fb_feed.php中没有名称

感谢所有帮助我

的人

我认为这是XML提要本身的问题。

请参阅本文。

用file_get_contents加载字符串,并在与的符号上执行str_replace

&amp;

所以留给你

$xml = simplexml_load_string(str_replace('&','&amp;',file_get_contents('https://developers.facebook.com/blog/feed/')));

编辑:

正如在评论中所看到的,这个问题以前已经解决过了,str_replace可以从我原来的改进为

$xml = simplexml_load_string(str_replace(array("&amp;", "&"), array("&", "&amp;"),file_get_contents('https://developers.facebook.com/blog/feed/')));

这样可以避免转换已正确编码的符号。

编辑2:

Facebook将请求从file_get_contents重定向到浏览器选择页面。因此,我们需要"欺骗"它,让它认为我们使用的是常规浏览器。

$url='https://developers.facebook.com/blog/feed/';
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($crl,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$ret = curl_exec($crl);
curl_close($crl);
$xml = simplexml_load_string(str_replace(array("&amp;", "&"),array("&", "&amp;"),$ret));     
var_dump($xml);

在大多数情况下,第一个答案应该有效,但edit 2适用于Facebook Dev博客,或任何其他基于用户代理标头重定向的博客。

您可能需要按照本页建议的对url进行编码

simplexml_load_file(rawurlencode('https://developers.facebook.com/blog/feed/'))

如果不起作用,可以尝试通过file_get_contents加载文件,并将返回值传递给xml解析器:

simplexml_load_string( file_get_contents('https://developers.facebook.com/blog/feed/') );
<?php
$url = "https://developers.facebook.com/blog/feed/";
$xml = str_replace('&','&amp;', file_get_contents($url));
$xml = simplexml_load_string($xml);
print_r($xml);
?>