【问题标题】:Load xml from another page从另一个页面加载 xml
【发布时间】:2012-08-31 03:03:13
【问题描述】:

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

感谢所有帮助我的人

【问题讨论】:

标签: php xml facebook


【解决方案1】:

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

See this article.

使用 file_get_contents 加载字符串,并在 & 上执行 str_replace

&amp;

所以留给你

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

编辑:

刚刚在cmets中看到,这个问题之前已经解决了,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 博客,或任何其他基于用户代理标头重定向的博客。

【讨论】:

  • 你的 str_replace 确实解决了加载 XML 的问题!
  • 现在我没有错误,但我得到了 facebook 主页的内容,而不是 developers.facebook.com/blog/feed 的 xml
  • 看起来 Facebook 正在重定向请求,让我看看能否找到解决办法。
  • 嗨,Marco,我已经编辑了答案,使用我们之前使用的 str_replace 加载 XML。该错误看起来是由无效的 XML 引起的,因此希望可以修复它(我已经测试过,它对我来说可以正常工作)。
【解决方案2】:

您可能需要按照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/') );

【讨论】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多