Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   валидная рсс-лента (https://forum.antichat.xyz/showthread.php?t=105855)

Дикс 11.02.2009 22:44

валидная рсс-лента
 
сделал вот такую:
PHP код:

<?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(000$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>";

выводит:
PHP код:

  <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>

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

Ошибка разбора 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 код:

<?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 не должно быть никаких выводов а я у тебя вижу пробел(или какой то непечатный символ)
PHP код:

 <root

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

Цитата:

Сообщение от oRb
Единственная проблема была с незакрытыми тегами 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 документа такова:
PHP код:

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

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

то есть пролог <?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(корневого элемента(узла)) а у тебя наоборот,
да я ж его потом ваще удалил, рут там точно не нужен.
PHP код:

<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"> 
<channel> 
<title>The Даун Таун

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


Время: 16:52