PDA

Просмотр полной версии : валидная рсс-лента


Дикс
11.02.2009, 22:44
сделал вот такую:

<?php if(!defined('TRAZH')) die;
header("Content-type: text/xml");
echo '<root><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>The Даун Таун. Обитель Треша и Жести</title>
<link>http://thedowntown.ru</link>
<description>'.getPhrase('descr').'</description>
<lastBuildDate>'.date('r', time()).'</lastBuildDate>
<language>ru</language>';

$res = $db->query("SELECT title, alias, day, month, year, preview FROM trazh_creative ORDER BY tid DESC LIMIT 0, 30", 1);

if($db->numRows)
foreach($res as $trazh){
$pubTime = date("r", mktime(0, 0, 0, $trazh['month'], $trazh['day'], $trazh['year']));
echo '<item>
<title>'.$trazh['title'].'</title>
<link>http://thedowntown.ru/trazh/'.$trazh['alias'].'</link>
<description>'.$trazh['preview'].'</description>
<pubDate>'.$pubTime.'</pubDate>
</item>';
}


echo "</channel>\n</rss></root>";


выводит:

<root><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>The Даун Таун. Обитель Треша и Жести</title>
<link>http://thedowntown.ru</link>
<description>Авторский проект Дикса о мёртвом городке Даун Таун и Науме.<br>Треш и жесть, упакованные
в качественную литературную обёртку.<br> Психически неуравновешенным к прочтению не рекомендуется.</description>
<lastBuildDate>Thu, 12 Feb 2009 00:39:53 +0600</lastBuildDate>
<language>ru</language><item>
<title>asdsadasdas</title>
<link>http://thedowntown.ru/trazh/asds</link>
<description>adsdasdas</description>
<pubDate>Wed, 02 Apr 2008 00:00:00 +0600</pubDate>
</item><item>
<title>ТРИ</title>
<link>http://thedowntown.ru/trazh/213123</link>
<description>то в исходный код флэшки можно внедрить javascript, который при прямом доступе к флэшке исполнится, как и в IE, так и в Firefox'е. Это, конечно, разработчиками ВКонтакте учтено: прямой доступ к флэшке запрещен. Но флэшка сохраняется в кэше браузера, откуда ее можно загрузить без проблем.</description>
<pubDate>Fri, 30 Nov 2007 00:00:00 +0600</pubDate>
</item><item>
<title>ДВА</title>
<link>http://thedowntown.ru/trazh/213123g</link>
<description>се вместе, да бы уменьшить бояновые темы в разделе. Все вопросы, касающиеся заливки шелла в Форуме, задаем сюда. Приветствуется помощь в наполнении темы актуальным материа</description>
<pubDate>Fri, 30 Nov 2007 00:00:00 +0600</pubDate>
</item><item>
<title>Новый 2009</title>
<link>http://thedowntown.ru/trazh/new2009</link>
<description>Кучерявый сидел перед камином и читал книжку про лангольеров, когда неожиданно поднялся страшный ураган..</description>
<pubDate>Mon, 01 Dec 2008 00:00:00 +0600</pubDate>
</item></channel>
</rss></root>


если посылается хидер - Опера ругается:

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

Обработать документ как HTML
Ошибка:missing root element
Описание:http://www.w3.org/TR/REC-xml/
1: <root><?xml version="1.0" encoding="UTF-8"?>
2: <rss version="2.0">
3: <channel>
4: <title>The Даун Таун. Обитель Треша и Жести</title>


пробовал убирать/добавлять <root> - эффекта нет.

если хидер не посылать - просто белый экран. Но опера не предлагает подписаться на эту рсс-ленту, ничего.

все файлы в utf-8 without BOM.
опера подчёркивает первые два пробела красным - типа лишнее, не знаю как ещё от этих пробелов избавиться?

CrazyStudentS_Mi}{
12.02.2009, 01:52
возможно это поможет http://feedvalidator.org/

oRb
12.02.2009, 17:35
Дикс,
убери root и проверь в другом браузере.
Была у меня пару недель назад точно такая же задача и такая же ошибка. Оказалось это опера бажит (у меня 10). Часа 2 долбался. Открыл этот же фид в новой вкладке - все норм стало)

Дикс
12.02.2009, 19:13
не, в фф тоже самое.

oRb
12.02.2009, 20:45
Накатал такой скрипт - все пашет: <?php
header('Content-Type: application/rss+xml');
$tmp = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>The Даун Таун. Обитель Треша и Жести</title>
<link>http://thedowntown.ru</link>
<description>Авторский проект Дикса о мёртвом городке Даун Таун и Науме.<br/>Треш и жесть, упакованные
в качественную литературную обёртку.<br/> Психически неуравновешенным к прочтению не рекомендуется.</description>
<lastBuildDate>Thu, 12 Feb 2009 00:39:53 +0600</lastBuildDate>
<language>ru</language><item>
<title>asdsadasdas</title>
<link>http://thedowntown.ru/trazh/asds</link>
<description>adsdasdas</description>
<pubDate>Wed, 02 Apr 2008 00:00:00 +0600</pubDate>
</item><item>
<title>ТРИ</title>
<link>http://thedowntown.ru/trazh/213123</link>
<description>то в исходный код флэшки можно внедрить javascript, который при прямом доступе к флэшке исполнится, как и в IE, так и в Firefox'е. Это, конечно, разработчиками ВКонтакте учтено: прямой доступ к флэшке запрещен. Но флэшка сохраняется в кэше браузера, откуда ее можно загрузить без проблем.</description>
<pubDate>Fri, 30 Nov 2007 00:00:00 +0600</pubDate>
</item><item>
<title>ДВА</title>
<link>http://thedowntown.ru/trazh/213123g</link>
<description>се вместе, да бы уменьшить бояновые темы в разделе. Все вопросы, касающиеся заливки шелла в Форуме, задаем сюда. Приветствуется помощь в наполнении темы актуальным материа</description>
<pubDate>Fri, 30 Nov 2007 00:00:00 +0600</pubDate>
</item><item>
<title>Новый 2009</title>
<link>http://thedowntown.ru/trazh/new2009</link>
<description>Кучерявый сидел перед камином и читал книжку про лангольеров, когда неожиданно поднялся страшный ураган..</description>
<pubDate>Mon, 01 Dec 2008 00:00:00 +0600</pubDate>
</item></channel>
</rss>
XML;
die($tmp);
?>
Единственная проблема была с незакрытыми тегами br.

AkyHa_MaTaTa
12.02.2009, 21:01
2 Дикс перед root node не должно быть никаких выводов а я у тебя вижу пробел(или какой то непечатный символ)

<root>

все же попробуй сохранить этот скрипт в другом редакторе потому что ну очень похоже что идет Include Unicode Signature (BOM) или с Add Byte Order Mark.

Единственная проблема была с незакрытыми тегами br.
ну <![CDATA[]]> еше не кто не отменял, вроде.

Дикс
12.02.2009, 21:41
странно.
убрал "<?xml version="1.0" encoding="UTF-8"?>" всё отлично заработало.
пример oRb также ругается, пока не уберёшь xml тег..

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

за cdata спасибо :) на работе только сегодня его применял, а дома вечером чета совсем даже в голову не приходит :)

AkyHa_MaTaTa
12.02.2009, 21:56
Как то я сразу не посмотрел, вобшем по DTD структура валидного xml документа такова:

<? пролога ?>
<корневой элемент>

</корневой элемент>

то есть пролог <?xml version="1.0"?> должен идти да root node(корневого элемента(узла)) а у тебя наоборот, поставь впереди всего пролог и должно все работать.

Дикс
13.02.2009, 09:39
у меня везде utf-8.
в базе, в хтмл сайта, в посланных php хидерах, в сохранённых файлах со скриптами.
достаточно я в своей жизни намучался с этими кодировками, поэтому теперь очень строго за этим слежу.

Дикс
15.02.2009, 09:03
то есть пролог <?xml version="1.0"?> должен идти дo root node(корневого элемента(узла)) а у тебя наоборот,

да я ж его потом ваще удалил, рут там точно не нужен.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>The Даун Таун

я не могу понять почему у меня всё работает без <?xml ?>, а с ней не работает??

VDShark
15.02.2009, 14:35
2Дикс
Пролог (<?xml version="1.0" encoding="UTF-8"?> ) не является обязательным - поэтому и работает (хоте все же рекомендуется писать).
А вообще почитай про well-formed xml-доки, думаю вопросы отпадут.