Правильная верстка RSS?

Доброго времени суток. По теме сабжа: интересует как у вас верстается RSS, а конкретно что делать с тегами? Удалять или засовывать в <![CDATA[]]>? Нашел руководство по созданию RSS для news.yandex.ru, но там про теги ничего сказано не было.
  • Вопрос задан
  • 4352 просмотра
Пригласить эксперта
Ответы на вопрос 4
Вообще rss должен быть валидным xml.
XML говорит нам, что все данные которые находятся внутри <![CDATA[]]> будут выведены в результирующее дерево как есть. Т.е. если в значении узла есть символ <, то лучше использовать <![CDATA[]]>. Также нужно учесть, что xml не понимает мнемоники типа &nbsp;. Вместо него нужно писать &amp;nbsp; или же использовать <![CDATA[]]>.
Я, например, в классе c_xml ( www.phpclasses.org/package/7232-PHP-Convert-between-XML-files-and-arrays-or-strings.html ) делаю так

static function valueToXML($value){
	  if (mb_strpos($value,'<')!==false || mb_strpos($value,'&')!==false) {
			$value="<![CDATA[$value]]>";
		}
		return $value;
	}

У этого кода есть недостаток — он не учитывает непечатные символы.

Но никакой ошибки не будет если использовать <![CDATA[]]> везде без разбору. Валидаторы провалидируют, а рсс-ридеры прочтут.
Также не забудьте учесть, что в значении узла может присутствовать сама строка "<![CDATA[]]>". В этом случае я порекомендую её заменить на строку &lt;![CDATA[]]&gt;
Ответ написан
Комментировать
AloneCoder
@AloneCoder
[object Object]
Я не думаю что добавить или удалить <![CDATA[]]> займет много времени, проверьте валидатором
Ответ написан
Комментировать
startsevdenis
@startsevdenis
У яндекса все просто, если у вас в rss есть теги, то использовать <![CDATA[]]> обязательно, если нет то не используйте, ну нужно заменять спецсимволы, то есть яндекс какого либо ограничения не накладывает. Поэтому проще все таки использовать <![CDATA[]]>.
Ответ написан
GRADUSnick
@GRADUSnick
я пользуюсь php-классом от хабровчанина zelenin. Сам класс лежит тут github.com/zelenin/rssgen Валидацию RSS-ки проходят, без всяких CDATA.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы