Канал RSS не работает: что-то не так с <? Xml version = "1.0" encoding = "iso-8859-1"?> - PullRequest
0 голосов
/ 04 августа 2011

Я писал простой 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>
";
}
?>

Проблема в том, что <?xml version="1.0" encoding="iso-8859-1"?> возникает после нежелательной пустой строки, генерируемойPHP скрипт, который я считаю причиной того, что он не работает.Я прав?Как я могу решить это?Спасибо.

1 Ответ

2 голосов
/ 04 августа 2011

Ваша проблема - сущность &ndash; в элементе title, которая недопустима в xml (это html-определенная сущность); просто используйте «-» или используйте десятичную версию: &#8210;.

Кроме того, необходимо поместить конечные теги channel и rss вне цикла while.

Чтобы избавиться от первой пустой строки, просто замените

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

с

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