0

我正在尝试在我的网站中加载此页面 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 中没有名称

感谢所有帮助我的人

4

3 回答 3

2

我认为这是 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);

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

于 2012-09-06T10:13:08.377 回答
0

可能是您需要按照此页面的建议对 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/') );
于 2012-09-06T10:08:21.970 回答
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);
?>
于 2012-09-06T10:09:35.473 回答