Недавно я столкнулся с ошибкой из-за качества данных при поддержке браузера, и я ищу безопасное правило для применения экранирования строки без двойного размера, если это не требуется.
Последовательность байтов UTF-8 "E2-80-A8" (U+2028, РАЗДЕЛИТЕЛЬ СТРОК), вполне допустимый символ в базе данных Unicode. Однако эта последовательность представляет собой разделитель строк (да, кроме "0A").
И что плохо, многие браузеры (включая Chrome, Firefox и Safari; другие я не тестировал) не смогли обработать обратный вызов JSONP, содержащий строку, содержащую этот символ Unicode. JSONP был включен в не-Unicode HTML, который я не контролировал.
Браузеры просто сообщали об ошибке INVALID CODE/syntax в таком JavaScript, который выглядит допустимым в инструментах отладки и во всех текстовых редакторах. Я предполагаю, что он может попытаться преобразовать «E2-80-A8» в BIG-5 и нарушить синтаксис JS.
Вышеприведенное является лишь примером того, как Unicode может неожиданно сломать вашу систему. Насколько мне известно, некоторые хакеры могут использовать RTL и другие управляющие символы себе во благо. И в спецификации Unicode много «кавычек», «пробелов», «символов» и «элементов управления».
ВОПРОС:
Существует ли список символов Unicode, которые каждый программист должен знать о скрытых функциях (и ошибках), которые мы могли бы не хотеть, чтобы они были эффективными в нашем приложении. (например, Windows отключает RTL в имени файла).
РЕДАКТИРОВАТЬ:
Я не прошу ни JSON, ни JavaScript. Я прошу общую передовую практику передачи Unicode во всех программах.