Почему нулевой символ запрещен даже в разделах CDATA? - PullRequest
3 голосов
/ 02 февраля 2009

XML, почему нулевой символ запрещен даже в разделах CDATA?

Кажется, что файл заканчивается прямо здесь.

Есть решение? Base64

Ответы [ 3 ]

4 голосов
/ 02 февраля 2009

Поскольку это не действительный символ XML , то есть он должен выдавать ошибку разбора. Вероятно, это связано с историческими причинами (строки, оканчивающиеся нулем) и из-за простой текстовой природы XML: все, что может помешать редактору с поддержкой Unicode, не рекомендуется ...

2 голосов
/ 02 февраля 2009

Вы можете найти ответ на этот предыдущий вопрос:

Почему «управляющие» символы недопустимы в XML 1.0?

1 голос
/ 02 февраля 2009

Он не должен «завершать файл», но должен генерировать ошибку правильной формы. Это запрещено, потому что большая часть мира все еще использует обработку строк с нулевым символом в конце, поэтому допущение \ 0 может вызвать проблемы в некоторой неопределенной точке цепочки обработки.

Это может быть даже уязвимостью в безопасности; в прошлом было много эксплойтов, основанных на взаимодействии систем, которые допускают \ 0, и тех, которые принимают его как терминатор. Поэтому самое безопасное - просто запретить это.

Другие управляющие символы могут быть экранированы как & # ...; ссылки на символы в других местах в XML 1.1, но не в разделах CDATA. В XML 1.0 нет никакого способа получить управляющие символы вообще. В конце концов, это должен быть текстовый, понятный человеку формат.

Base64

Да. Но если вы обрабатываете в основном большие куски двоичного файла, инкапсуляция его в XML, вероятно, не является разумным выбором.

...