Недавно я столкнулся с ошибкой из-за качества данных с поддержкой браузера, и я ищу безопасное правило для применения экранирования строки без двойного размера, если это не требуется.
Последовательность байтов 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 во всех программах.