我正在尝试加载此页面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
&
所以留给你
$xml = simplexml_load_string(str_replace('&','&',file_get_contents('https://developers.facebook.com/blog/feed/')));
编辑:
正如在评论中所看到的,这个问题以前已经解决过了,str_replace可以从我原来的改进为
$xml = simplexml_load_string(str_replace(array("&", "&"), array("&", "&"),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("&", "&"),array("&", "&"),$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('&','&', file_get_contents($url));
$xml = simplexml_load_string($xml);
print_r($xml);
?>