0

我已经使用这个 php 来获取我博客的最新帖子:

function read_rss($display=0,$url='') {
    $doc = new DOMDocument();
    $doc->load($url);
    $itemArr = array();

    foreach ($doc->getElementsByTagName('item') as $node) {
        if ($display == 0) {
            break;
        }

        $itemRSS = array (
            'title'       => $node->getElementsByTagName('title')->item(0)->nodeValue,
            'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
            'link'        => $node->getElementsByTagName('link')->item(0)->nodeValue,
        );

         array_push($itemArr, $itemRSS);

        $display--;
    }
    return $itemArr;
}

我从教程中学到了这一点,因为我不确定如何完成这项任务。但是它可以工作,但是我的错误日志中不断打印此错误:

[12-Jun-2010 06:13:36] PHP Warning:  DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: Document is empty in http://www.prettyklicks.com/blog/?feed=rss2, line: 1 in public_html/includes/functions.php on line 153
[12-Jun-2010 06:13:36] PHP Warning:  DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: Start tag expected, '&lt;' not found in http://www.prettyklicks.com/blog/?feed=rss2, line: 1 in public_html/includes/functions.php on line 153

有任何想法吗?

谢谢!

4

1 回答 1

0

我有同样的问题,这是解决方案:

换行:

$doc->加载($url);

$doc->loadXML(preg_replace("/>\s+<", file_get_contents($url)));

这样做是将 url 加载到字符串中,去除标签之间的所有空格,然后将其传递给 DOMDocument 对象进行加载。

为什么空格很重要?我不确定,但似乎 WordPress RSS 提要包含空格以使其缩进很好,但这会干扰 DOMDocument 的解析器并使其看起来像是缺少标签。

感谢我找到答案的 http://netweblogic.com/php/domdocument-whitespace-php/ ;他们针对不同的情况解决相同的问题。

奇怪的是(我不明白这一点),我的代码在我的开发服务器上没有解决方法,但在生产服务器上却没有。我不确定为什么,但它必须与 Apache/PHP/WordPress 的版本和配置有关。

无论如何,我希望这会有所帮助,而且还为时不晚!

保罗。

于 2010-09-24T18:08:55.443 回答