Проблемы с использованием CDATA для проверки RSS-каналов? - PullRequest
2 голосов
/ 01 сентября 2011

Мне нужно сделать RSS-ленту для моего сайта.Проблема в том, что контент был импортирован и содержит встроенные стили и другую разметку.Я рассмотрел различные методы, но не могу удалить все это, и некоторые из них мешают проверке моего канала.

Одна из работ, которая, кажется, работает, это:

    <![CDATA[ <description>My Content here </description> ]]> 

Из того, что я прочитал, это останавливает синтаксический анализ содержимого, поэтому оно проверяется нормально.Я посмотрел на нескольких читателей, и это кажется хорошим, но есть ли риск / недостаток этого метода?Я не очень понимаю последствия, поэтому я ценю любые советы или информацию о тестах, которые я мог бы выполнить.

Спасибо

1 Ответ

3 голосов
/ 05 сентября 2011

Это вполне разумный подход, хотя вы должны заметить, что вы должны использовать это:

<description><![CDATA[My Content here]]></description>  

... вместо:

<![CDATA[ <description>My Content here </description> ]]> 

... в качестве *Элемент 1007 * является частью спецификации RSS, поэтому должен надлежащим образом присутствовать в RSS, а не экранироваться как текст.

Если вы собираетесь включить контент, отличный от RSS (обычно HTML), в ваш title и description, особенно если это пользовательский контент, который может содержать различную разметку или недопустимую разметку, маркировка всего контента как символьных данных, как это, безусловно, является подходящим способом.

Считыватели RSS обычноожидайте и успешно справляйтесь с HTML, хранящимся как CDATA в элементе description, в то время как используемые им синтаксические анализаторы XML (и все остальное, анализирующее ваш RSS), вероятно, будут весьма чувствительны к искаженному XML, который может быть создан путем включения тегов HTML, неожиданных объектовили даже только один «<» в тексте <description> без экранирования.

Используйте любой метод, который ваша библиотека XML предоставляет впоказывать содержимое как CDATA, а не просто вручную оборачивать его <![CDATA[ и ]]>;Таким образом, все размышления (что произойдет, если контент включает ]]>?) будут выполнены для вас.

...