Примечание. Ваш вопрос касается экранирования , а не кодировки . Escape использует <и т. Д., Чтобы синтаксический анализатор мог различить «это команда XML» и «это некоторый текст». Кодировка - это то, что вы указываете в заголовке XML (UTF-8, ISO-8859-1 и т. Д.). </p>
Прежде всего, как и все остальные, используйте библиотеку XML. XML выглядит просто, но кодирование + экранирование - это темное вуду (что вы заметите, как только встретите умлауты, японский и другие странные вещи, такие как " цифры полной ширины " (& # FF11; равен 1) ). Обеспечение читабельности XML-файла - задача Сизифа.
Я предлагаю никогда не пытаться быть умным в отношении кодировки текста и экранирования в XML. Но не позволяйте этому помешать вам; просто запомни, когда он тебя кусает (и будет).
Тем не менее, если вы используете только UTF-8, чтобы сделать вещи более читабельными, вы можете рассмотреть эту стратегию:
- Если текст содержит «<», «>» или «&», оберните его в
<![CDATA[ ... ]]>
- Если текст не содержит этих трех символов, не деформируйте его.
Я использую это в редакторе SQL, и это позволяет разработчикам вырезать и вставлять SQL из стороннего инструмента SQL в XML, не беспокоясь о возможности выхода. Это работает, потому что в нашем случае SQL не может содержать умлауты, поэтому я в безопасности.