НейроАгент

Специальные символы XML: Полное руководство по экранированию

Узнайте, какие символы XML требуют экранирования и их сущностные ссылки (<, >, &, ", '). Полное руководство с правилами контекста, числовыми ссылками и примерами программирования.

Какие символы нужно экранировать в XML-документах, и где можно найти полный список этих специальных символов?

НейроАгент

XML требует экранирования пяти специальных символов в большинстве контекстов: <, >, &, ", и ', которые имеют соответствующие ссылочные сущности &lt;, &gt;, &amp;, &quot;, и &apos;. Символ амперсанда (&) и меньше (<) должны всегда экранироваться, за исключением случаев, когда они используются в качестве разделителей разметки или внутри специальных разделов, таких как блоки CDATA. Для полного списка всех XML-сущностей символов и их числовых ссылок можно обратиться к comprehensive странице Википедии об XML и HTML-сущностях символов или к официальным спецификациям W3C XML.

Содержание


Пять основных XML-символов для экранирования

XML определяет пять фундаментальных символов, которые должны экранироваться при появлении в текстовом содержимом или значениях атрибутов, поскольку эти символы имеют специальное значение в XML-разметке:

  1. Амперсанд (&) - должен экранироваться как &amp;

    • Этот символ начинает ссылочные сущности и ссылки на символы
    • Согласно спецификации XML, символ амперсанда должен всегда экранироваться, когда он не начинает допустимую ссылочную сущность
  2. Меньше (<) - должен экранироваться как &lt;

    • Этот символ начинает теги элементов и другую разметку
    • Спецификация W3C XML четко указывает, что символ меньше зарезервирован для разметки
  3. Больше (>) - должен экранироваться как &gt;

    • Хотя это и не строго обязательно, экранирование этого символа является хорошей практикой для единообразия
    • Символ больше завершает начальные и конечные теги
  4. Двойная кавычка (") - должна экранироваться как &quot; в двойных кавычках атрибутов

    • Требуется, когда значение атрибута ограничено двойными кавычками
    • Это предотвращает интерпретацию парсером кавычки как конца значения атрибута
  5. Одинарная кавычка/Апостроф (') - должна экранироваться как &apos; в одинарных кавычках атрибутов

    • Требуется, когда значение атрибута ограничено одинарными кавычками
    • Эта ссылочная сущность была введена в XHTML 1.0

Важное примечание: Эти пять символов - единственные, которые всегда должны экранироваться в XML-содержимом. Другие символы могут быть представлены непосредственно или через числовые ссылки на символы при необходимости.


Правила экранирования в зависимости от контекста

Требования к экранированию XML-символов различаются в зависимости от их места в структуре документа:

В содержимом элемента

  • & и < должны всегда экранироваться
  • >, " и ' могут появляться буквально, но должны экранироваться для единообразия
  • Пример: 3 &lt; 5 &amp; 7 вместо 3 < 5 & 7

В значениях атрибутов

  • & должен всегда экранироваться
  • < должен всегда экранироваться (теги элементов не допускаются в атрибутах)
  • " должен экранироваться, если атрибут ограничен двойными кавычками
  • ' должен экранироваться, если атрибут ограничен одинарными кавычками
  • > может появляться буквально, но должен экранироваться для единообразия

Специальные контексты, где экранирование не требуется

Комментарии (<!-- комментарий -->):

  • Все пять специальных символов могут появляться без экранирования
  • Пример: <!-- Это комментарий с < & > " ' -->

Инструкции обработки (<?target data?>):

  • Пять специальных символов могут появляться без экранирования
  • Исключение: имя инструкции не может быть “xml” (зарезервировано для спецификации XML)
  • Пример: <?xml-stylesheet type="text/css" href="style.css"?>

Секции CDATA (<![CDATA[...]]>):

  • Экранирование не требуется внутри секций CDATA
  • Единственное ограничение - последовательность ]]> не может появляться
  • Пример: <![CDATA[3 < 5 & 7 " ' содержимое]]>

Полные ссылочные сущности символов

Для комплексного экранирования XML-символов можно использовать как именованные ссылочные сущности, так и числовые ссылки на символы.

Именованные ссылочные сущности

Спецификация XML определяет пять предопределенных именованных сущностей:

Символ Ссылочная сущность Описание
< &lt; Знак меньше
> &gt; Знак больше
& &amp; Амперсанд
" &quot; Двойная кавычка
' &apos; Одинарная кавычка/апостроф

Расширенные именованные сущности

Помимо пяти предопределенных сущностей, XML поддерживает множество дополнительных именованных сущностей. Наиболее полный список доступен на странице Википедии “Список XML и HTML-сущностей символов”, который включает:

  • Математические символы: &frac12;, &times;, &divide;
  • Символы валют: &euro;, &pound;, &yen;
  • Знаки препинания: &ndash;, &mdash;, &hellip;
  • Специальные символы: &copy;, &reg;, &trade;

Числовые ссылки на символы

Когда именованные сущности недоступны, можно использовать числовые ссылки на символы для представления любого символа Unicode:

Десятичный формат

Формат: &#nnnn;, где nnnn - это десятичный кодовый точка Unicode

Шестнадцатеричный формат

Формат: &#xhhhh;, где hhhh - это шестнадцатеричный кодовый точка Unicode

Распространенные примеры:

Символ Десятичная ссылка Шестнадцатеричная ссылка
& &#38; &#x26;
< &#60; &#x3C;
> &#62; &#x3E;
" &#34; &#x22;
' &#39; &#x27;

Полная ссылка Unicode: Для поиска числового кода любого символа можно использовать ресурсы вроде Unicode Charts или онлайн-инструменты, такие как Unicode Lookup.


Лучшие практики для экранирования XML

Реализации в языках программирования

JavaScript:

javascript
// Использование регулярных выражений
function escapeXml(str) {
    return str.replace(/[&<>"']/g, function(char) {
        return {
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;',
            '"': '&quot;',
            "'": '&apos;'
        }[char];
    });
}

// Использование DOM API
function escapeXmlWithDOM(str) {
    const div = document.createElement('div');
    div.textContent = str;
    return div.innerHTML;
}

Java:

java
// Использование Apache Commons Lang
import org.apache.commons.text.StringEscapeUtils;

String escaped = StringEscapeUtils.escapeXml11("3 < 5 & 7 \" '");

// Использование javax.xml.bind
import javax.xml.bind.DatatypeConverter;

String escaped = DatatypeConverter.printString("3 < 5 & 7 \" '");

Python:

python
# Использование xml.sax.saxutils
from xml.sax.saxutils import escape

escaped = escape("3 < 5 & 7")

# Для полного экранирования включая кавычки
from xml.sax.saxutils import escape, quoteattr
fully_escaped = quoteattr("3 < 5 & 7 \" '")

Вопросы безопасности

  1. Всегда экранируйте пользовательский контент: Никогда не доверяйте вводу от пользователей - всегда экранируйте его перед включением в XML
  2. Экранируйте в правильном контексте: Понимаете, экранируете ли вы для значений атрибутов или содержимого элемента
  3. Проверяйте после экранирования: Убедитесь, что ваш экранированный XML все еще допустим и хорошо сформирован
  4. Будьте осторожны с двойным экранированием: Некоторые фреймворки могут экранировать контент дважды - проверьте это

Вопросы производительности

  • Предварительно компилируйте шаблоны экранирования: Для повторяющихся операций экранирования предварительно компилируйте регулярные выражения
  • Используйте встроенные функции: Предпочитайте функции экранирования XML, специфичные для языка, когда они доступны
  • Рассмотрите использование CDATA для больших блоков: Для больших объемов текста, которые могут содержать много специальных символов, используйте секции CDATA вместо индивидуального экранирования

Инструменты и ресурсы

Онлайн-инструменты

  1. FreeFormatter XML Escape Tool: https://www.freeformatter.com/xml-escape.html

    • Бесплатный онлайн-инструмент для экранирования или снятия экранирования XML-документов
    • Обрабатывает как именованные, так и числовые ссылки на символы
  2. LambdaTest XML Escape: https://www.lambdatest.com/free-online-tools/xml-escape

    • Преобразует обычное XML-содержимое в экранированный HTML
    • Показывает как оригинальную, так и экранированную версии
  3. JSONFormatter XML Escape: https://jsonformatter.org/xml-escape

    • Онлайн-инструмент для экранирования амперсанда, кавычки и всех специальных символов

Авторитетные спецификации

  1. W3C XML 1.0 Specification: https://www.w3.org/TR/xml/

    • Определенный источник стандартов и требований XML
  2. W3C Character Escapes in Markup: https://www.w3.org/International/questions/qa-escapes

    • Официальные рекомендации по использованию экранирования символов в разметке и CSS
  3. XML Entity Definitions for Characters: https://www.w3.org/2003/entities/2007doc/

    • Официальные определения сущностей и сопоставления символов

Полные списки ссылок на символы

  1. Wikipedia: List of XML and HTML character entity references: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

    • Наиболее полный список именованных символьных сущностей
    • Включает как XML, так и HTML-сущности с сопоставлениями Unicode
  2. Microsoft: XML Character Entities and XAML: https://learn.microsoft.com/en-us/dotnet/desktop/xaml-services/xml-character-entities

    • Документация Microsoft по XML-сущностям символов
    • Включает практические примеры и рекомендации по использованию
  3. W3Resource: XML Reserved Markup Characters: https://www.w3resource.com/xml/reserved-markup-characters.php

    • Подробная таблица ссылок на символы и их использования
    • Включает примеры и лучшие практики

Источники

  1. What characters do I need to escape in XML documents? - Stack Overflow
  2. XML Reserved Markup Characters - w3resource
  3. Escaping XML Data - Liquid Technologies
  4. How to Escape Characters in XML ? - GeeksforGeeks
  5. What Characters Need to be Escaped in XML Documents? - Novixys Software Dev Blog
  6. Free Online XML Escape / Unescape Tool - FreeFormatter.com
  7. List of XML and HTML character entity references - Wikipedia
  8. Using character escapes in markup and CSS - W3C
  9. XML Character Entities and XAML - Microsoft Learn
  10. XML escaped characters - Advanced Installer

Заключение

Экранирование XML необходимо для поддержания допустимости документа и предотвращения ошибок парсинга. Пять основных символов, которые должны экранироваться, - это &, <, >, ", и ', с соответствующими ссылочными сущностями &amp;, &lt;, &gt;, &quot;, и &apos;. Помните, что требования к экранированию различаются в зависимости от контекста - эти символы не нужно экранировать в комментариях, инструкциях обработки или секциях CDATA.

Для комплексных потребностей в экранировании символов используйте полные списки ссылочных сущностей, доступные на Википедии и в официальных спецификациях W3C. При работе с языками программирования предпочитайте встроенные функции экранирования и всегда экранируйте пользовательский контент для предотвращения проблем безопасности. Следуя этим практикам и используя доступные ресурсы, вы можете гарантировать, что ваши XML-документы остаются хорошо сформированными и совместимыми между разными системами и платформами.