XML解析错误:XML或文本声明不在实体的开头

时间:2014-01-28 11:41:07

标签: php xml rss

我的rss.php中有这个错误

  

XML解析错误:XML或文本声明不在实体的开头   地点:http://blah.com/blah/blah/site/rss.php   第1行,第3列:
   这显示在错误

下面
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><item><title>xzfbcbcxv 123</title><description><p>Description for the rss feed</p></description></item></channel></rss>

  

---------------- ^

显示在页面左侧和?xml行之间。

在我的rss.php中我有

<?php header("Content-type: text/xml"); ?>
<?php include("includes/database.php");?>
<?php global $_TWITTER_TABLE, $_HTTP_ADDRESS, $_NEWS_TABLE; ?>
<?php $str = '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<?php $str .= '<rss version="2.0">';?>
<?php
$str.='<channel>';
$sql = "SELECT * FROM $_NEWS_TABLE LIMIT 5";
$result = mysql_query($sql) or die ($sql."".mysql_error());
    while($row = mysql_fetch_object($result)){
        $str.= '<item>';
                $str.= '<title>'.$row->title. '</title>';
                $str.= '<description>'.$row->content. '</description>';
        $str.= '</item>';
}
$str.= '</channel>';
?>
<?php $str .= '</rss>'; 
    echo $str;
?>

3 个答案:

答案 0 :(得分:8)

宣言前你有很多空格。你需要删除它。这可能是因为关闭PHP标记后跟空格或制表符或包含文件末尾的新行。您可以通过不关闭PHP标记来防止这种情况。

再看一下,删除文档顶部的所有结束标记:

<?php // make sure that this is the first character in the file, no spaces before it
    header("Content-type: text/xml");
    include("includes/database.php");
    global $_TWITTER_TABLE, $_HTTP_ADDRESS, $_NEWS_TABLE;
    $str = '<?xml version="1.0" encoding="UTF-8"?>';
    $str .= '<rss version="2.0">';
    $str.='<channel>';
    $sql = "SELECT * FROM $_NEWS_TABLE LIMIT 5";
    $result = mysql_query($sql) or die ($sql."".mysql_error());
    while($row = mysql_fetch_object($result)){
        $str.= '<item>';
        $str.= '<title>'.$row->title. '</title>';
        $str.= '<description>'.$row->content. '</description>';
        $str.= '</item>';
    }
    echo $str;

另外,请注意,由于安全问题,不推荐使用mysql_ *函数。你可能想看看mysqli和PDO

答案 1 :(得分:1)

我只是从wp-config文件的顶部删除空间,它对我有效... 这可能是XML解析White-Space的一个问题。

答案 2 :(得分:0)

我也遇到了这个问题,删除代码中所有不需要的行空格,我的意思是删除php标记之前和之后的所有不需要的行空格。 可能有更多原因,但95%这是php标签之后或之前的空格的原因。 <?php ?>