0

我在使用 PHP 生成有效的 xml 文件(用于 rss 提要)时遇到问题。问题是:没有空字符,也没有换行符或制表符,但 rss 阅读器(在我的情况下是 Safari)会引发错误:

自卫队

我的 PHP 代码是:

<?php
header("Content-Type: application/rss+xml");

if(!isset($_GET['searchQuery']) || $_GET['searchQuery'] == "")
{
    include_once './session_ajax.php';
    include("./include.php"); 
    require_once("./classes/myclass/myclass.class.php");
    $gmap_ajax = new myclass();
}

$query=sql_query("SELECT item_query, item_date, item_country FROM items WHERE 1 GROUP BY item_query ORDER BY item_id LIMIT 20",1);

$xml = "\n<rss version=\"2.0\">\n";
$xml .= "\t<channel>\n\t\t<title>myClass.com RSS Feed</title>\n\t\t<link>"._siteurl."feed.xml</link>\n\t\t<description>myClass.com is the largest...</description>\n\t\t<language>en-en</language>\n\t\t<pubDate>".date("r")."</pubDate>\n";

while($row=sql_fetch_array($query,1))
{
    $date = date("Y-m-d", $row['item_date']);
    $item_query2 = $row['item_query'];
    $item_query = str_replace(" ", "+", $row['item_query']);
    $xml .= "\t\t<item>\n\t\t\t<title>".$item_query2."</title>\n\t\t\t<link>"._siteurl."/".$item_query."/".$row['item_country']."</link>\n\t\t\t<description><![CDATA[Here is some more description]]></description>\n\t\t\t<pubDate>".date("r")."</pubDate>\n\t\t</item>\n";
}
$xml .= "\t</channel>\n</rss>";
echo trim("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
echo $xml;
?>

在 PHP 文件中,在 <?php 标记之前没有空格或其他任何内容,在 ?> 标记之后也没有任何内容......

我使用 Adob​​e CS5 作为编辑器。

在 Safari 以及我发现的每个在线验证器中,我都会收到此错误:

error on line 1 at column 6: XML declaration allowed only at the start of the document

问题是,我可以看到源代码中的空白区域,但错误位于 <?xml 标记的“l”处。

有没有人遇到过这个问题并且有一个想法或只是提示解决这个问题的正确方向?

编辑:

我也试过用Noteped++和Ultraedit32打开并保存,然后上传到服务器......同样的问题......

4

4 回答 4

0

手动检查所有文件后,我无法摆脱错误。我使用 Dreamweaver 作为我的文本编辑器。我使用了“应用源格式”功能,它为我删除了空格。这摆脱了错误

于 2014-04-04T00:55:04.320 回答
0

检查您的输出(在文本/十六进制编辑器中)是否有空格。

如果您看不到任何东西,您的问题很可能是您正在生成 BOM。使用File BOM Detector (Windows) 之类的工具来扫描您的文件(记住包含及其包含)。

于 2013-07-26T13:43:21.957 回答
0

检查您的回声修剪,您是否看到 php 标签,第一个在引号内,而最后一个在引号外,这就是您的问题。

于 2013-07-26T13:07:10.887 回答
0

谢谢大家的回答!特别感谢你,迪布斯特。

解决方案非常简单:

include("./include.php");

在这个文件中我找到了空白空间!

很抱歉浪费了您的时间,但如果其他人解决了这个问题:

另外,如果您绝对确定,请控制每个包含的文件两次...!

谢谢。向所有人致以最诚挚的问候!

英格玛

于 2013-07-26T13:53:05.053 回答