Все статьи

XML Entities: экранирование символов в XML-документах

Как и HTML, XML использует угловые скобки и амперсанд для разметки тегов, поэтому эти символы нельзя вставлять в текстовое содержимое «как есть» — документ перестанет быть валидным XML, и парсер выдаст ошибку вместо того, чтобы просто проигнорировать проблему.

Пять обязательных entity

В отличие от HTML, где определены сотни именованных entity, спецификация XML требует только пять:

  • &lt; — вместо <
  • &gt; — вместо >
  • &amp; — вместо &
  • &apos; — вместо одинарной кавычки '
  • &quot; — вместо двойной кавычки "

Кавычки обязательно экранировать только внутри значений атрибутов, а < и & — в любом текстовом содержимом.

Где это встречается на практике

Формат обмена «1С:Предприятие» строится на XML, и любое название товара или контрагента с амперсандом (например, «Иванов & Партнёры») ломает выгрузку, если не экранировано. Та же проблема — в RSS-лентах новостных сайтов: заголовок статьи с необработанным & делает всю ленту невалидной для агрегаторов.

Чем XML строже HTML

Браузеры обычно «прощают» невалидный HTML и пытаются отобразить страницу вопреки ошибкам. XML-парсеры так не делают: один неэкранированный амперсанд или угловая скобка — и весь документ считается невалидным, обработка прекращается с ошибкой.

Когда это нужно

  • Подготовка текста с пользовательскими данными перед вставкой в XML-документ (фиды, конфигурации, SOAP-сообщения).
  • Диагностика: увидеть «сырой» текст, скрытый за entity в полученном XML.
  • Ручное редактирование XML-файлов, где важно не сломать структуру документа.

Альтернатива entity: секция CDATA

Если текстовый блок содержит много спецсимволов (например, фрагмент HTML или кода внутри XML), удобнее обернуть его в <![CDATA[...]]> — внутри этой секции < и & не требуют экранирования и воспринимаются как обычный текст. Исключение — последовательность ]]>, которая закрывает CDATA и не может встречаться в содержимом самой секции.

Попробовать инструмент