【问题标题】:XML Parsing Error: junk after document element while generating RSS FeedXML 解析错误:生成 RSS 提要时文档元素后出现垃圾
【发布时间】:2010-04-21 20:16:28
【问题描述】:

我正在使用以下脚本为我的网站生成 RSS 提要:

<?php

class RSS
{
    public function RSS()
    {
            $root = $_SERVER['DOCUMENT_ROOT'];
        require_once ("../connect.php");
    }

    public function GetFeed()
    {
        return $this->getDetails() . $this->getItems();
    }

    private function dbConnect()
    {
        DEFINE ('LINK', mysql_connect (DB_HOST, DB_USER, DB_PASSWORD));
    }

    private function getDetails()
    {
        $detailsTable = "rss_feed_details";
        $this->dbConnect($detailsTable);
        $query = "SELECT * FROM ". $detailsTable ." WHERE feed_category = ''";
        $result = mysql_db_query (DB_NAME, $query, LINK);

        while($row = mysql_fetch_array($result))
        {
            $details = '<?xml version="1.0" encoding="ISO-8859-1" ?>
                    <rss version="2.0">
                        <channel>
                            <title>'. $row['title'] .'</title>
                            <link>'. $row['link'] .'</link>
                            <description>'. $row['description'] .'</description>
                            <language>'. $row['language'] .'</language>
                            <image>
                                <title>'. $row['image_title'] .'</title>
                                <url>'. $row['image_url'] .'</url>
                                <link>'. $row['image_link'] .'</link>
                                <width>'. $row['image_width'] .'</width>
                                <height>'. $row['image_height'] .'</height>
                            </image>';
        }
        return $details;
    }

    private function getItems()
    {
        $itemsTable = "rss_posts";
        $this->dbConnect($itemsTable);
        $query = "SELECT * FROM ". $itemsTable ." ORDER BY id DESC";
        $result = mysql_db_query (DB_NAME, $query, LINK);
        $items = '';
        while($row = mysql_fetch_array($result))
        {
            $items .= '<item>
                         <title>'. $row["title"] .'</title>
                         <link>'. $row["link"] .'</link>
                         <description><![CDATA['.$row["readable_date"]."<br /><br />".$row["description"]."<br /><br />".']]></description>
                     </item>';
        }
        $items .= '</channel>
                 </rss>';
        return $items;
    }

}

?>

令人费解的是,该脚本在我的本地主机上运行良好,但在我的远程服务器上出现以下错误:

XML Parsing Error: junk after document element
Location: http://mysite.com/rss/main/
Line Number 2, Column 1:<b>Parse error</b>:  syntax error, unexpected T_STRING in <b>/home/studentw/public_html/rss/global-reach/rssClass.php</b> on line <b>1</b><br />
^

【问题讨论】:

    标签: php xml rss parsing


    【解决方案1】:

    您可能有一些无关的字符,如制表符或空格,这些字符与远程服务器上的 xml 文件相呼应。在打印 xml 之前,我会使用输出缓冲来清理它。

    更新 1

    这是来自output buffering 上的 PHP 网站:

    <?php
    
    function callback($buffer)
    {
      // replace all the apples with oranges
      return (str_replace("apples", "oranges", $buffer));
    }
    
    ob_start("callback");
    
    ?>
    <html>
    <body>
    <p>It's like comparing apples to oranges.</p>
    </body>
    </html>
    <?php
    
    ob_end_flush();
    
    ?> 
    

    您可以搜索空格和制表符,而不是替换苹果和橙子。

    【讨论】:

    • 您能否解释一下“在打印出 xml 之前使用输出缓冲”是什么意思 - 抱歉,我对 XML 很陌生。
    【解决方案2】:

    尝试为响应发送正确的内容类型:

    您可以尝试以下方法:

    header("Content-Type:TYPE");
    

    其中 TYPE 是以下之一:

    text/xml
    application/rss+xml
    application/rdf+xml
    application/atom+xml
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多