CDATA
Здравствуйте, уважаемые посетители сайта okITgo.ru! Настоящая статья посвящена XML парсингу (разбору) и тому, как добавить в документ информацию, которую парсер разбирать не должен.
Весь текст в XML документе будет разобран парсером.
Но текст внутри секции CDATA парсер проигнорирует.
PCDATA – Разбираемые Символьные Данные
XML парсеры обычно разбирают весь текст в XML документе.
Когда XML элемент разбирается, текст между XML тегами также подвергается разбору (парсингу):
<message>Этот текст также разбирается</message> |
Парсер поступает так, поскольку XML элементы могут содержать другие элементы, как в этом примере, где элемент <name> содержит два других элемента (first и last):
<name><first>Билл</first><last>Гейтс</last></name> |
и парсер разобьет его на подэлементы, примерно так:
<name> <first>Билл</first> <last>Гейтс</last> </name> |
Разбираемые Символьные Данные (Parsed Character Data или PCDATA) – это термин, используемый для текстовых данных, которые будут разобраны XML парсером.
CDATA – (Неразбираемые) Символьные Данные
Термин CDATA (Character Data – Символьные Данные) используется для обозначения текстовых данных, которые XML парсер не должен разбирать.
Такие символы как "<" и "&" являются незаконными в XML элементах.
Символ "<" будет генерировать ошибку, поскольку парсер будет интрепретировать его как начало нового элемента.
Символ "&" будет генерировать ошибку, поскольку парсер будет интрепретировать его как начало специального символа.
Некоторые текстовые данные, например код JavaScript, могут содержать множество символов "<" или "&". Чтобы избежать ошибок, код скрипта может быть определен как CDATA.
Все, что находится внутри секции CDATA, игнорируется парсером.
Секция CDATA начинается с "<![CDATA[" и заканчивается на "]]>":
<script> <![CDATA[ function matchtwo(a,b) { if (a < b && a < 0) then { return 1; } else { return 0; } } ]]> </script> |
В примере выше все, что находится внутри секции CDATA, будет проигнорировано xml парсером.
Замечания по секциям CDATA:
Секция CDATA не может содержать строку "]]>". Вложенные секции CDATA не допустимы.
Последовательность символов "]]>", которая обозначает конец секции CDATA, не может содержать пробелов и переносов строки.
Спасибо за внимание и до новых встреч на страницах сайта okITgo.ru!
Может ли CDATA использоваться для размещения вируса или редиекта – например iframe. Или как промежуточный контейнер для хранения вредных ссылок.
У себя на сайте обнаружил в блоке CDATA длинную строку закодированную в base64 – не нравится мне эта строка.
Блок CDATA используется для размещения любых символьных данных, которые не разбираются парсером XML, т.е. в этом блоке может содержаться все что угодно – и HTML-теги iframe, и скрипты JavaScript, соответственно и вредоносная информация.