Не могу понять, почему код не выводит RSS

Статус
В этой теме нельзя размещать новые ответы.

virtualbrest

Полезный
Регистрация
6 Май 2007
Сообщения
210
Реакции
18
Есть код, который из базы выводит новости в RSS, все вроде правильно, отрабатывает без ошибок, в исходном коде вижу все что надо... а как RSS не работает, в чем я ошибся?

PHP:
$query = "select id, zagolovok, text from `news` limit 15";
$result = mysql_query($query, $dbconnect);

while ($line = mysql_fetch_assoc($result))
        {
            $return[] = $line;
        }

$now = date("D, d M Y H:i:s T");

$output = "<?xml version="1.0" encoding="windows-1251"?>
              <rss version="2.0">
                <channel>
                    <title>Виртуальный Брест RSS</title>
                    <link>http://name/rss.php</link>
                    <description>Новости сайта</description>
                    <language>ru-us</language>
                    <pubDate>$now</pubDate>
                    <lastBuildDate>$now</lastBuildDate>
                    <docs>http://name</docs>
                    <managingEditor>admin@name.com</managingEditor>
                    <webMaster>admin@name.com</webMaster>
            ";

foreach ($return as $line)
{
    $output .= "<item><title>".$line['zagolovok']."</title>
                    <link>http://name/news".$line['id'].".php</link>

<description>".substr(strip_tags($line['text']),0,100)."</description>
                </item>";
}
$output .= "</channel></rss>";
echo $output;
?>

name - мой домен. Кавычки экранированы (в приведенном выше коде нет).

Вот такая ошибка вылазит, если отправляю по хидеру, что это XML:

PHP:
header("Content-Type: application/xml");

PHP:
Ошибка разбора XML: синтаксическая ошибка (Строка: 1, Символ: 0)

Обработать документ как HTML
Ошибка:missing root element
Описание:http://www.w3.org/TR/REC-xml/
  1: |тут стоит курсор ошибки|<?xml version="1.0" encoding="windows-1251"?>
  2: <rss version="2.0">
  3: <channel>

Все, сам разобрался, оказывается в тему попадали кавычки из базы данных, их надо убирать и все будет работать.
 
до вывода скорее все го отправзяется один или несколько сиволов до начала выода, или где то присуствует символ которго не должно быть скорее всего ' или "
 
Я уже ничего не понимаю, буду видимо писать удаление всех симоволов кроме букв, так как опять перестало работать. До вывода ничего не выводится, пробелов нет, переводов строк тоже нет. Позже отпишусь о результатах, пока нет времени экспериментировать.
 
Нужно явно указать тип выводимого. Пробуйте вместо header("Content-Type: application/xml"); поставить
header('Content-Type: text/xml; charset=utf-8'."\n");

Не забудьте заменить utf-8 на ваш чарсет но вообще советую выводить в utf-8. Будет работать точно!
 
Я что-то не могу понять, если в заголовке к примеру или в самом сообщении есть кавычки русские или простые, то че с ними делать? Если они есть то вообще ничего не выводится. Экранировать их как-то можно или тупо вырезать?
 
Нужно явно указать тип выводимого. Пробуйте вместо header("Content-Type: application/xml"); поставить
header('Content-Type: text/xml; charset=utf-8'."\n");

Не забудьте заменить utf-8 на ваш чарсет но вообще советую выводить в utf-8. Будет работать точно!

пробовал, проблема не в этом, а в том что из базы вываливаются кавычки, с ними - ну никак, причем я их преобразовываю что угодно, но это ни на что ни влияет, все равно ничего не выводится. Как только никаких кавычек нет - все сразу ок.

Так и думал что будут вопросы по кавычкам. Русские - это «образец» (ну не знаю я как они там правильно называются), простые это те что обычно экранируются слешем.

А может кто-нибудо поделиться функцией или регуляркой кто чем пользуется для обработки строк, попадающих в RSS, а то меня уже совсем переклинило за эти 2 дня, ниче не пашет, и не могу понять почему? Буду премного благодарен.
 
Стукни в аську, дам свою генерилку RSS.
 
Если опять не будет работать, стукну, спасибо, но вроде победил. Проблема была действительно в кавычках, и только в русских, их почему-то стандарт в упор не понимает, вот как я вырезал:

PHP:
$text = substr(quote_html($text), 0, 500);
$text = str_replace ("&laquo;", "",  $text);
$text = str_replace ("&raquo;", "",  $text);
$text = str_replace ("«", "\"",  $text);
$text = str_replace ("»", "\"",  $text);

quote_html - функция, которая вырезает HTML.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху