сделал вот такую: 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(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>"; выводит: 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. опера подчёркивает первые два пробела красным - типа лишнее, не знаю как ещё от этих пробелов избавиться?
Дикс, убери root и проверь в другом браузере. Была у меня пару недель назад точно такая же задача и такая же ошибка. Оказалось это опера бажит (у меня 10). Часа 2 долбался. Открыл этот же фид в новой вкладке - все норм стало)
Накатал такой скрипт - все пашет: 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.
2 Дикс перед root node не должно быть никаких выводов а я у тебя вижу пробел(или какой то непечатный символ) PHP: <root> все же попробуй сохранить этот скрипт в другом редакторе потому что ну очень похоже что идет Include Unicode Signature (BOM) или с Add Byte Order Mark. ну <![CDATA[]]> еше не кто не отменял, вроде.
странно. убрал "<?xml version="1.0" encoding="UTF-8"?>" всё отлично заработало. пример oRb также ругается, пока не уберёшь xml тег.. с редактором проблем нет, я знаю что такое BOM, что пхп плохо с ним работает и всегда сохраняю без него. редактор это позволяет. за cdata спасибо на работе только сегодня его применял, а дома вечером чета совсем даже в голову не приходит
Как то я сразу не посмотрел, вобшем по DTD структура валидного xml документа такова: PHP: <? пролога ?> <корневой элемент> </корневой элемент> то есть пролог <?xml version="1.0"?> должен идти да root node(корневого элемента(узла)) а у тебя наоборот, поставь впереди всего пролог и должно все работать.
у меня везде utf-8. в базе, в хтмл сайта, в посланных php хидерах, в сохранённых файлах со скриптами. достаточно я в своей жизни намучался с этими кодировками, поэтому теперь очень строго за этим слежу.
да я ж его потом ваще удалил, рут там точно не нужен. PHP: <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>The Даун Таун я не могу понять почему у меня всё работает без <?xml ?>, а с ней не работает??
2Дикс Пролог (<?xml version="1.0" encoding="UTF-8"?> ) не является обязательным - поэтому и работает (хоте все же рекомендуется писать). А вообще почитай про well-formed xml-доки, думаю вопросы отпадут.