Лучшая практика для обработки вертикальных вкладок и других недопустимых символов XML - PullRequest
17 голосов
/ 05 декабря 2011

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 19 сентября 2014

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

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

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

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

0 голосов
/ 17 октября 2013

Вы должны избегать их, используя амперстенд (от � до &#0x1F), а затем декодировать / восстанавливать их в конце.

См. XmlTextWriter неправильно пишет управляющие символы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...