RSS-канал: htmlspecialchars() и CDATA

Я написал небольшой класс на PHP для создания простого RSS-канала.

Описание товара также должно содержать html-теги.

Мне было интересно, какой из них лучше и каковы преимущества/недостатки каждого метода:

$item .= "<description><![CDATA[" . $description . "]]></description>\n";

or

$item .= "<description>" . htmlspecialchars($description, ENT_NOQUOTES, "UTF-8") . "</description>\n";

Единственный недостаток метода CDATA, о котором я могу думать, заключается в том, что я должен заранее проверить, содержит ли строка $description

"<![CDATA[" or "]]>".

Заранее спасибо за разъяснения.


person casper    schedule 10.10.2012    source источник
comment
Однажды я столкнулся с персонажем, который все еще испортил rss-канал (сделал его недействительным) при использовании htmlspecialchars(), извините, я не могу быть более конкретным   -  person kalpaitch    schedule 11.10.2012
comment
Вы должны использовать библиотеку записи XML для создания XML вместо того, чтобы собирать его вручную.   -  person deceze♦    schedule 11.10.2012


Ответы (1)


Есть только 1 вариант, когда вы хотите использовать HTML-код, раздел CDATA.

Причина: фид должен быть допустимым XML, но HTML может не быть допустимым XML. Таким образом, если вы используете HTML без CDATA, все внутри описания, не являющееся допустимым XML, приведет к ошибке XML-Parser-Error. Это уже может быть вызвано такими простыми вещами, как &nbsp; или <br> (что является допустимым HTML, но недопустимым XML)

CDATA-разделы парситься не будут, так что можете использовать там что хотите.

Но, тем не менее, для разметки лучше использовать <content:encoded>.

person Dr.Molle    schedule 10.10.2012