【问题标题】:custom rss feed suddenly does not work anymore自定义 RSS 提要突然不再起作用
【发布时间】:2011-02-09 13:34:48
【问题描述】:

我只是不明白发生了什么,几个月来我没有对网站进行任何更改,但现在突然 rss 提要不再工作了。

我用以下代码创建了一个 php 文件:

header('Content-type: text/xml'); 
include("config/config.inc.php");

    $result = mysqli_query($link, "SELECT * FROM tutorials ORDER BY tutorial_id DESC LIMIT 50");
?>
<rss version="2.0">
    <channel>
         <title>CMS tutorial site</title>
         <description>Bringing you the best CMS tutorials from the web</description>
         <link>http://cmstutorials.org</link>
        <?php 
        while($row = mysqli_fetch_object($result))
        {
            $user = mysqli_fetch_object(mysqli_query($link, "SELECT * FROM user_extra WHERE userid=".$row->user_id.""));
            ?>
            <item>
                <title><?php echo $row->title; ?></title>
                <author><?php echo $user->username; ?></author>
                <description><?php echo $row->description; ?></description>
                <pubDate><?php echo $row->date; ?></pubDate>
                <link>http://cmstutorials.org/view_tutorial.php?tutorial_id=<?php echo $row->tutorial_id; ?></link>
            </item>
            <?php
        }
        ?>
    </channel>
</rss>

我通过在 phpmyadmin 中执行查询来检查它,它可以工作,没有给出任何错误。当我删除标题内容类型和 rss 标签时,它将打印出查询中的每一行,但提要不会显示任何内容

这是提要的链接http://cmstutorials.org/rss(或http://cmstutorials.org/rss.php

【问题讨论】:

    标签: php rss feed


    【解决方案1】:

    有趣的是,IE8 提供了详细的错误消息,而 Firefox 没有表示任何更改。它说“由于错误而无法显示此提要”并指向第 229 行第 32 列。

    <description>We 
    

    这 99.9999% 是编码问题。 (验证器抱怨非 UTF-8 字符。)很可能,您的数据库内容存储在与 utf-8 不同的字符集中。

    您将通过validator 获得运行提要的更多详细信息。

    【讨论】:

    • 哦,我从没想过要在 IE 中查看,但你说的是 100% 可能,因为我有编码问题 -> cmstutorials.org 检查描述,有小方块。我将数据库设置为 utf8-unicode。我添加到数据库的内容来自 rss 源
    • 我尝试将传入的 rss 提要重新编码为 UTF8,但似乎仍然存在一些问题。我将使用一些过滤器将特殊引号更改为普通的 utf8 标准引号。或者类似的东西
    • 嘿,那个 rss 验证器刚刚救了我的命。所以谢谢和+1!我总是使用 html 和 css 验证器,但从未意识到有一个用于 rss。
    【解决方案2】:

    您的文件是有效的 UTF-8,但不是有效的 XML。我认为您可能需要通过 htmlentities 函数传递所有数据。

     <title><?php echo htmlentities($row->title,ENT_QUOTES,"utf-8"); ?></title>  
     <author><?php echo htmlentities($row->username,ENT_QUOTES,"utf-8"); ?></author>  
     <description><?php echo htmlentities($row->description,ENT_QUOTES,"utf-8"); ?></description>  
     <pubDate><?php echo htmlentities($row->date,ENT_QUOTES,"utf-8"); ?></pubDate>  
    

    如果这不起作用,请尝试将“utf-8”更改为其他编码,例如“cp1252”或“iso-8859-1”。

    【讨论】:

    • 不,它不是有效的 UTF-8,至少有一个字符损坏。另外,永远不要在 XML 输出中使用 htmlentities。使用普通的 UTF-8 字符或将数据包装在 CDATA 标记中。
    • 感谢您的提示。我即将将我当前的站点转换为 codeigniter 框架,因此所有这些都应该得到修复。我使用了上面提供的代码,即使 Pekka 说不推荐它,因为它是初步修复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多