Список символов Unicode, которые должны быть отфильтрованы в выводе?

Недавно я столкнулся с ошибкой из-за качества данных с поддержкой браузера, и я ищу безопасное правило для применения экранирования строки без двойного размера, если это не требуется.

Последовательность байтов UTF-8 «E2-80-A8» (U+2028, LINE SEPARATOR), совершенно допустимый символ в Unicode Однако эта последовательность представляет собой разделитель строк (да, кроме "0A").

И, что плохо, многие браузеры (включая Chrome, Firefox и Safari; я не тестировал Обратный вызов JSONP, который имеет строку, содержащую этот символ Unicode. JSONP был включен в не-Unicode HTML, который я не контролировал.

Браузеры просто сообщали об ошибке INVALID CODE/syntax error в таком JavaScript, который выглядит допустимым в инструментах отладки и во всех текстовых редакторах. Я предполагаю, что он может попытаться преобразовать «E2-80-A8» в BIG-5 и нарушить синтаксис JS.

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

ВОПРОС:

Существует ли список символов Юникода, которые каждый программист должен знать о скрытых функциях (и ошибках), которые мы можем не захотеть использовать в нашем приложении. (например, Windows отключает RTL в имени файла).

РЕДАКТИРОВАТЬ:

Я не прошу ни JSON, ни JavaScript. Я прошу об общей передовой практике передачи Unicode во всех программах.

20
задан Jonathan Leffler 16 May 2012 в 02:57
поделиться