Пользовательский RSS-канал вдруг больше не работает - PullRequest
1 голос
/ 19 апреля 2010

Я просто не понимаю, что происходит, я ничего не менял на сайте в течение нескольких месяцев, но теперь вдруг 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)

Ответы [ 2 ]

4 голосов
/ 19 апреля 2010

Как ни странно, именно IE8 дает подробное сообщение об ошибке, где Firefox ничего не говорит об изменении. Он говорит «этот канал не может быть отображен из-за ошибок» и указывает на строку 229, столбец 32.

<description>We 

это 99,9999% проблема кодирования. (Валидатор жалуется на не-UTF-8 символ.) Скорее всего, содержимое вашей базы данных хранится в наборе символов, отличном от utf-8.

Вы получите более подробную информацию при запуске канала через валидатор .

1 голос
/ 19 апреля 2010

Ваш файл является допустимым 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".

...