从另一个页面加载xml

时间:2012-09-06 10:04:27

标签: php xml facebook

我正在尝试加载此页面 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-load-file]:   https://developers.facebook.com/blog/feed/:10:解析器错误:   xmlParseEntityRef:第2行的/fb_feed/fb_feed.php中没有名称

感谢所有帮助我的人

3 个答案:

答案 0 :(得分:2)

我认为这是XML Feed本身的一个问题。

See this article

使用file_get_contents加载字符串,并在amperand上执行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);

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

答案 1 :(得分:0)

可能需要将网址编码为this page建议

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/') );

答案 2 :(得分:0)

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