首页 文章

带有缺失标签的RSS Feed

提问于
浏览
1

我正在研究一个非常简单的RSS Feed . 我正在做的是从数据库中提取信息并使用PHP将其转换为XML . 但是,当我使用Chrome查看代码以确保它们全部显示时,我会在页面顶部显示这些错误 .

error on line 1322 at column 12: Encoding error

这是我用来从我的数据库中提取并创建RSS Feed的代码 .

<?php
include('connectDatabaseScript.php');
$sql = "SELECT * FROM table ORDER BY id DESC";
$query = mysql_query($sql) or die(mysql_error());

header("Content-type: text/xml"); 

echo "<?xml version='1.0' encoding='UTF-8'?> 
<rss version='2.0'>
<channel>
<title>My RSS Feed</title>
<link>http://www.mywebsite.com/rss.php</link>
<description>The description for the feed.</description>
<language>en-us</language>"; 

while($row = mysql_fetch_array($query)) {
$title=$row['title'];
$finalTitle = str_replace("&", "and", $title);
$link=$row['link'];
$newLink = str_replace("&", "&amp;", $link);
$category = $row['category'];
$date = $row['date'];
$description = $row['description'];

echo "<item> 
<title>$finalTitle</title>
<link>$newLink</link>
<description>$description</description>
<author>John Doe</author>
<pubDate>$date<pubDate>
<category>$category</category>
</item>"; 
} 
echo "</channel></rss>"; 
?>

此代码通常卡在 Headers 标记上 . 当它这样做时,它会将链接合并在一起,并且还可以合并项目的其余部分和其他几个项目 . 这是一个正在发生的事情的例子 .

<item> 
<title>Title No 415: Title <item> 
<title>Title No 291: Another Title</title>
<link>http://www.mywebsite.com/post.php?id=291</link>
<description>description</description>
<author>John Doe</author>
<pubDate>Jan. 1, 2000</pubDate>
<category>Generic</category>
</item>

我已经弄清楚是什么特征导致了这种情况发生 . 这是“ - ”字符出现在我所拥有的导致问题的一些 Headers 中 . 我一直在尝试使用str_replace函数删除它 . 虽然我已经能够使用“&”成功,但它不能与“ - ”一起使用 . 是否有另一种解决方案可以摆脱 Headers 中的“ - ”或者是否仍然可以使用str_replace?

2 回答

  • -1

    我有一些PHP脚本进行MySQL查询并使用它来生成RSS提要 . 需要清理RSS元素的文本,例如 titledescription ,以便以XML格式呈现 .

    这是一个功能:

    function clean_text($in_text) {
        return utf8_encode(
            htmlspecialchars(
                stripslashes($in_text)));
    }
    

    我认为更简单的功能可以解决您遇到的问题:

    function clean_text($in_text) {
        return htmlspecialchars(
                stripslashes($in_text));
    }
    

    utf8_encode() 的调用将ISO-8859-1字符串编码为UTF-8,这对我来说是必要的,因为我在我的数据库中处理ISO-8859-1字符编码 . PHP中的htmlspecialchars()函数转为&amp;,<to&lt;和>到&gt; .

    这是一个使用该函数输出一些RSS的语句:

    echo "<description>" . clean_text($row['description']) . "</description>";
    
  • 1

    你不应该像这样写你的XML . 为避免此类错误,您可以使用DOMDocument编写XML,并使用saveXML进行保存 .

相关问题