Почему вы должны использовать блоки XML CDATA?
При создании XML мне интересно, почему блоки CDATA используются, а не просто экранируют данные. В блоке CDATA разрешено что-то, что не может быть экранировано и помещено в обычный тег?
<node><![CDATA[ ...something... ]]></node>
вместо
<node>...something...</node>
Естественно, вам нужно будет экранировать данные в любом случае:
function xmlspecialchars($text)
{
return str_replace(''', ''', htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}
Из спецификации кажется, что CDATA была просто возможным решением, когда у вас нет возможности скрыть данные - но вы все еще доверяете этому. Например, RSS-канал из вашего блога (который по тем или иным причинам не может избежать сущностей).
2 ответа
CDATA - это просто стандартный способ сохранить исходный текст, как есть, это означает, что, независимо от того, обрабатывает ли приложение XML, не должно предприниматься никаких явных действий для удаления.
Обычно это происходит с помощью JavaScript, встроенного в XHTML, когда вы используете зарезервированные символы:
<script type="text/javascript">
//<![CDATA[
var test = "<This is a string with reserved characters>";
if (1 > 0) {
alert(test);
}
//]]>
</script>
Если у тебя есть if (1 > 0)
вместо этого он должен был бы явно скрыться (чего не происходит). Это также намного более читабельно, как это.
Это первая и наиболее важная функция читабельности. XML и SGML до того, как он изначально должен был быть понятен человеку - верите или нет:-))
Во-вторых, для хорошего парсера это отличная возможность. Окончание]]> гарантированно будет фактическим окончанием блока, но кроме этого это блоб.
Парсер книг также должен хранить информацию / атрибут на представлении узла, чтобы отслеживать наличие в нем явного CDATA и никогда не трогать ни одного символа в нем.