Лучшая практика для обработки вертикальных вкладок и других недопустимых символов xml

У меня есть приложение, которое (как и многие другие) принимает вход пользователя, сохраняет его в базе данных, а затем обрабатывает его, используя (среди прочего) инструменты XML. Приложение принимает бесплатный ввод текста и, как и многие другие разработчики, я очень осторожен с экранированием и цитированием, чтобы он мог обрабатывать ввод, содержащий разные типы пробелов, символы кавычек, зарезервированные символы XML и т.д.

Однако иногда пользователю удаётся вводить строку, содержащую вертикальный символ табуляции (hex 0B) или фид формы (hex 0C). это невозможно обработать инструментами XML вообще и вызывает приложение barf.

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

есть ли принятая передовая практика или общая стратегия для обработки этих символов при обработке XML?

Ответы

Ответ 1

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

http://www.jdom.org/docs/apidocs.1.1/org/jdom/Element.html#setText(java.lang.String)

который является установщиком String..., который может вызывать исключение! Вертикальная вкладка - это точно один из тех символов, для которых отсутствует XML-объект, а также способ "избежать" его только с помощью XML.

Я сам оборачиваюсь этим, используя кодировку base64 для дезинфекции строк, которые могут содержать эти символы. Это немного глупо, так как я все время должен кодировать и декодировать base64, но я не думаю, что есть хорошая альтернатива.