【问题标题】:RSS Feed won't work: something wrong with <?xml version="1.0" encoding="iso-8859-1"?>RSS 提要不起作用:<?xml version="1.0" encoding="iso-8859-1"?>
【发布时间】:2011-08-04 09:24:20
【问题描述】:

我一直在编写一个简单的 PHP 脚本,它应该生成一个 RSS 提要,从 MySQL 数据库中提取数据。

<?php
require("$_SERVER[DOCUMENT_ROOT]mysql.php");
$type = $_GET["type"];
$result = mysql_query("SELECT * FROM Setting WHERE Type = \"$type\"");
header("Content-Type: text/xml");
echo "
<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
<rss version=\"2.0\">
  <channel>
    <title>Vhannibal &ndash; I migliori setting per Dreambox! &ndash; Feed RSS</title>
    <link>http://www.vhannibal.net/</link>
    <description>".$type."</description>
";
while ($row = mysql_fetch_array($result))
{
    extract($row);
    echo "
    <item>
      <title>$row[Name]</title>
      <link>http://www.vhannibal.net/download_setting.php?id=$row[ID]</link>
      <description>".strftime("%e %b", $row["Date"])."</description>
    </item>
  </channel>
</rss>
";
}
?>

问题是&lt;?xml version="1.0" encoding="iso-8859-1"?&gt; 出现在 PHP 脚本生成的不需要的空行之后,我认为这是它不起作用的原因。我对吗?我该如何解决?谢谢。

【问题讨论】:

  • 数据库字符编码是什么?
  • 我也试过utf-8,没有任何改变。
  • 为什么不直接删除
  • 您的 echo 命令似乎在
  • 我不能,PHP 脚本添加了它。这就是为什么我问如何删除它。

标签: php mysql xml rss


【解决方案1】:

您的问题是标题元素中的 &amp;ndash; 实体在 xml 中无效(它是一个 html 定义的实体);只需使用“-”或使用十进制版本:&amp;#8210;

另外,您需要将 channelrss 结束标记放在 while 循环之外。

要去掉第一个空行,只需替换

   echo "
    <?xml version="1.0" encoding="iso-8859-1"?>
    [...]

   echo "<?xml version="1.0" encoding="iso-8859-1"?>
   [...]

【讨论】:

  • 有什么问题?您的项目中可能有其他 html 实体 - 标题标签
  • 我很确定问题出在 行。我读到由 PHP 脚本引起的空行可能会导致这种情况。我试图 ob_clean();也。没有任何改变。
  • 我更新了答案以去掉第一个空行,但如果你不解决上述实体和关闭标签的问题,你将无法获得有效的 xml
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多