Экранирование строк JavaScript и JSON

Инструмент превращает обычный текст в строку для кода: экранирует кавычки, переводы строк и обратную косую черту, по желанию записывает кириллицу и эмодзи кодами \uXXXX. Обратное действие возвращает текст из строки, скопированной из кода, JSON или лога, и показывает место ошибки, если строка записана неверно. Пригодится, чтобы вставить текст или путь Windows в код, собрать JSON вручную или прочитать сообщение вида "\u041E\u0448\u0438\u0431\u043A\u0430".

Как пользоваться

Выберите формат и вставьте текст — строка появится справа. «В кавычках» добавляет кавычки формата вокруг результата; выключите, если вставляете текст внутрь готовой строки. «Не-ASCII как \uXXXX» нужен для файлов и систем, которые не принимают UTF-8.

В режиме «Вернуть текст» строку можно вставить с кавычками или без. Для JavaScript вид кавычек определяется сам, для JSON проверяются строгие правила формата. При смене действия результат переносится во ввод. Текст обрабатывается в браузере и не отправляется на сервер; код из строки не выполняется.

Действие
Формат

Экранируем…

Текст

Он сказал: "Привет!"
Путь: C:\Users\Анна	Итого: 5 ₽ 😀

Строка

Для экранирования включите JavaScript. Пример: текст Он сказал: "Да" в строке JSON записывается как"Он сказал: \"Да\"", перевод строки — как \n.

Что экранируется

  • \", \', \` — кавычка того же вида, что ограничивает строку. Остальные кавычки внутри экранировать не нужно.
  • \\ — сама обратная косая черта. Путь C:\Users в строке записывается как "C:\\Users", иначе \U прочитается как последовательность.
  • \n, \t, \r — перевод строки, табуляция, возврат каретки. В обычной строке настоящий перевод строки — синтаксическая ошибка.
  • \uXXXX — любой символ по коду. В JavaScript есть и \u{1F600} для эмодзи, и короткое \x41.

Чем JSON строже JavaScript

Строка JSON — только в двойных кавычках. Допустимы лишь \" \\ \/ \b \f \n \r \t и \uXXXX: записи \x41, \u{1F600} и \' работают в JavaScript, но JSON.parse() на них выдаст ошибку. Эмодзи в JSON кодируется двумя \u — суррогатной парой: "\uD83D\uDE00".

JavaScript
JSON.stringify('Он сказал: "Да"\n')  // '"Он сказал: \\"Да\\"\\n"'
JSON.parse('"\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442"')  // 'Привет'

Собирая JSON в коде, не склеивайте строки вручную — JSON.stringify() сам экранирует всё нужное.

Шаблонные строки

В строке в обратных кавычках переводы строк допустимы как есть, а ${…} подставляет значение выражения. Чтобы ${ осталось текстом, его записывают как \${ — инструмент делает это сам и не выполняет подстановки при разборе, а сообщает о них. Если обратные косые черты должны остаться буквально, например в регулярном выражении или пути, используйте String.raw`C:\Users`.

Вопросы и ответы

Почему JSON.parse пишет Unexpected token?

Чаще всего в строке остался настоящий перевод строки или табуляция, одинарные кавычки вместо двойных или последовательность из JavaScript вроде \x41. Вставьте строку в режиме «Вернуть текст» с форматом JSON — инструмент покажет место ошибки.

Зачем экранировать \u2028?

Символы-разделители строк Юникода U+2028 и U+2029 до ES2019 считались переводом строки и ломали строку в JavaScript, хотя в JSON допустимы. Старые браузеры и сборщики ещё встречаются, поэтому инструмент записывает их кодом.

Нужно ли экранировать косую черту /?

Нет. JSON разрешает \/, и некоторые библиотеки так пишут, чтобы строка не закрыла </script> внутри HTML. Значение строки от этого не меняется.

Связанные инструменты

Текст для вставки в разметку экранирует «Экранирование HTML», для адресов — «URL-кодирование». Проверить JSON целиком поможет «JSON форматтер».