Почему вы должны использовать блоки XML CDATA? - PullRequest
4 голосов
/ 26 августа 2010

При создании XML мне интересно, почему блоки CDATA используются, а не просто экранируют данные.Есть ли что-то разрешенное в блоке CDATA, которое нельзя экранировать и поместить в обычный тег?

<node><![CDATA[ ...something... ]]></node>

вместо

<node>...something...</node>

Естественно, вам необходимо экранировать данные вВ любом случае:

function xmlspecialchars($text)
{
    return str_replace('&#039;', '&apos;', htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}

Из spec кажется, что CDATA была просто возможным решением, когда у вас нет возможности скрыться от данных - но вы все еще доверяете этому.Например, RSS-канал из вашего блога (который по тем или иным причинам не может избежать сущностей).

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

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 &gt; 0), то пришлось бы явно скрыться (чего не происходит).Это также намного более читабельно, как это.

0 голосов
/ 27 августа 2010

Это первая и наиболее важная функция читабельности. XML и SGML до того, как он изначально должен был быть понятен человеку - хотите верьте, хотите нет: -))

Во-вторых, для хорошего парсера это отличная возможность. Окончание]]> гарантированно будет фактическим окончанием блока, но кроме этого это блоб.

Парсер книг также должен хранить информацию / атрибут на представлении узла, чтобы отслеживать наличие в нем явных CDATA и никогда не трогать ни одного символа в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...