Язык: Русский

tools / escape

escape/

Экранирование и деэкранирование HTML-сущностей, Unicode \uXXXX и строк JS.

Исходный текст

Результат экранирования

Частые вопросы

Чем различаются экранирование HTML-сущностей, Unicode и строк JS

Это три разных способа записи, выбирать нужно по тому, куда пойдет текст. HTML-сущности выглядят как & и < и позволяют безопасно вставить текст в веб-страницу; экранирование Unicode — это кодовые точки вроде \u4f60, они часто встречаются в JSON и логах; экранирование строк JS обрабатывает кавычки, обратный слеш и переносы строк, чтобы текст можно было вставить в код JavaScript.

Какие символы меняет экранирование HTML и затрагивает ли оно кириллицу и иероглифы

Только 5 символов: & превращается в &amp;, < — в &lt;, > — в &gt;, двойная кавычка — в &quot;, одинарная — в &#39;. Кириллица, иероглифы, пробелы, переводы строк и все остальное остаются как есть и не превращаются в записи вроде &#x4E2D;. Для вставки в текст HTML или в значение атрибута в кавычках экранировать нужно именно эти пять символов.

Почему после HTML-деэкранирования некоторые &xxx; не изменились

Неопознанные именованные сущности остаются как есть, ошибки при этом нет. Встроен набор распространенных (латинские и греческие буквы, знаки препинания, валюты, стрелки, математические символы и т. д.); имена чувствительны к регистру, а точка с запятой в конце обязательна. Если нужного имени нет во встроенном наборе, запишите его числовой сущностью, например &#20013; или &#x4E2D;, и она будет декодирована. Числовая сущность с кодовой точкой 0, больше 10FFFF или из диапазона суррогатов превращается в символ замены �.

Как работает экранирование Unicode и почему эмодзи превращается в две части \u

Экранирование Unicode обрабатывает только символы не из ASCII; латинские буквы, цифры и знаки остаются как есть, поэтому «你好 abc» превращается в \u4f60\u597d abc, шестнадцатеричные цифры строчные. Символы вне BMP, например эмодзи, по правилам JavaScript разбиваются на суррогатную пару и записываются двумя частями вроде \ud83d\ude00. При деэкранировании распознаются обе записи — \uXXXX и \u{…}, соседние суррогатные пары склеиваются обратно в один символ, а некорректный \u остается как есть без ошибки.

Можно ли вставить результат экранирования строки JS прямо в код

Да, достаточно заключить его в кавычки: подойдут и одинарные, и двойные, потому что экранируются оба вида кавычек. Обратный слеш, перевод строки и табуляция становятся \\ \n \t, остальные управляющие символы записываются как \xHH, а кириллица и иероглифы не экранируются. Обратные кавычки и ${ не экранируются, поэтому для шаблонных строк их нужно обработать самостоятельно.

Что означает сообщение «Не удалось деэкранировать: Символ N: …»

Это значит, что после обратного слеша в этом месте стоит недопустимая запись. В режиме строки JS после \x нужны две шестнадцатеричные цифры, после \u — четыре (или от 1 до 6 внутри \u{…}); восьмеричные записи от \1 до \7 не поддерживаются, а одиночный обратный слеш в самом конце тоже вызывает ошибку. Частая причина — вставленный путь Windows: в C:\users последовательность \u не является допустимой. Обратные слеши в путях деэкранировать вообще не нужно.

Можно ли использовать результат экранирования как строку JSON

Деэкранирование — да, экранирование — нет. Последовательности \n, \", \/, \uXXXX из строки JSON можно вернуть в исходный текст деэкранированием в режиме «Строка JS». Но при экранировании одинарная кавычка записывается как \', а управляющие символы — как \xHH, и JSON не принимает ни то, ни другое; чтобы получить корректную строку JSON, используйте JSON.stringify.

Загружается ли текст на сервер и безопасно ли вставлять содержимое из неизвестного источника

Нет, экранирование и деэкранирование выполняются в браузере, ограничения на число символов нет; если ввод больше миллиона символов, расчет начнется, когда вы сделаете паузу на 0.5 секунды. Деэкранирование HTML и JS разбирает текст по частям собственным кодом, без DOM страницы и без eval, поэтому вставка чего-то вроде <script> даст только текст, и он не будет выполнен.