ToolDeck

String Escape

Экранирование и снятие экранирования строк для JavaScript, Python и JSON

Попробовать пример

Ввод

Вывод

Работает локально · Безопасно вставлять секреты
Результат появится здесь…
Режим:

Что такое экранирование строк?

Экранирование строк — это процесс добавления обратной косой черты (или другого маркера) перед символами, имеющими особое значение внутри строкового литерала. Когда парсер языка программирования встречает двойную кавычку внутри строки, заключённой в двойные кавычки, он воспринимает её как конец строки. Экранирование кавычки с помощью обратного слеша — написание \" вместо " — говорит парсеру обрабатывать её как обычный символ, а не как разделитель. Каждый язык со строковыми литералами имеет правила экранирования, хотя точные последовательности различаются.

Наиболее распространённые управляющие последовательности соответствуют пробельным и управляющим символам, которые не могут присутствовать непосредственно в исходном коде. Перевод строки обозначается как \n, табуляция — как \t, а буквальная обратная косая черта — как \\. Эти соглашения восходят к языку C (ISO/IEC 9899) и приняты в JavaScript (ECMA-262), Python, Java, Go и Rust. JSON (RFC 8259) использует тот же синтаксис, но поддерживает меньший набор последовательностей.

Снятие экранирования (иногда называемое «де-экранированием») — это обратная операция: преобразование управляющих последовательностей обратно в исходные символы. Это часто требуется при чтении лог-файлов, разборе ответов API или отладке данных, прошедших двойное экранирование. Обе операции механические и при ручном выполнении легко приводят к ошибкам — именно поэтому разработчики используют инструмент экранирования при работе с многострочными строками, встроенными кавычками или Unicode-символами.

Зачем использовать онлайн-инструмент экранирования строк?

Добавление или удаление обратных слешей вручную — утомительная задача, в которой легко допустить ошибку, особенно при наличии вложенных кавычек или многострочного ввода. Браузерный инструмент экранирования строк даёт мгновенный результат без необходимости запускать REPL или писать одноразовые скрипты.

⚡
Мгновенное преобразование
Вставьте текст и сразу получите экранированный или деэкранированный результат. Не нужно открывать терминал, запускать REPL или писать вспомогательный скрипт.
🔀
Переключение между форматами
Переключайтесь между режимами экранирования JavaScript, Python и JSON. Каждый язык по-своему обрабатывает одинарные кавычки, Unicode и управляющие символы — инструмент применяет правильные правила автоматически.
🔒
Обработка на стороне клиента
Всё экранирование и снятие экранирования выполняется в вашем браузере с помощью JavaScript. Ваши строки никогда не отправляются на сервер — это важно при работе с API-ключами, токенами или пользовательскими данными.
📋
Без регистрации и установки
Откройте страницу и начните вставлять текст. Не нужно создавать аккаунт, устанавливать расширения и принимать cookie-уведомления.

Случаи использования экранирования строк

Фронтенд-разработка
Экранируйте пользовательский контент перед вставкой в атрибуты HTML, встроенные скрипты или шаблонные литералы. Это предотвращает нарушение разметки и XSS-уязвимости из-за неэкранированных кавычек или угловых скобок.
Интеграция с серверными API
Формируйте тела JSON-запросов со встроенными строками, содержащими переводы строк, табуляции или кавычки. Правильное экранирование предотвращает некорректный JSON, который вызовет ошибки 400 на принимающем API.
DevOps и конфигурирование
Пишите экранированные строки для JSON-конфигов, YAML heredoc или переменных окружения. Неправильно расставленный обратный слеш в Dockerfile ENV или Kubernetes ConfigMap может сломать деплой.
QA и тестовые данные
Генерируйте тестовые строки со встроенными управляющими символами, Unicode-последовательностями и вложенными кавычками. Такие пограничные строки нужны для проверки корректной обработки специальных символов парсерами и сериализаторами.
Инженерия данных
Очищайте дважды экранированные данные из CSV-экспортов, агрегаторов логов или дампов баз данных. Поля, прошедшие через несколько слоёв сериализации, часто накапливают лишние обратные слеши, которые нужно убрать.
Обучение и отладка
Исследуйте, как разные языки представляют одну и ту же строку. Студенты и разработчики, только знакомящиеся с языком, могут сравнить экранирование JavaScript, Python и JSON бок о бок, чтобы понять различия.

Справочник управляющих последовательностей

В таблице ниже перечислены распространённые управляющие последовательности и указано, поддерживаются ли они в JavaScript, Python и JSON. Все три языка разделяют базовый набор (перевод строки, табуляция, обратная косая черта, двойная кавычка), но расходятся в отношении одинарных кавычек, шестнадцатеричных escape-последовательностей и расширенной Unicode-нотации.

ПоследовательностьЗначениеJavaScriptPythonJSON
\nNewline (LF)YesYesYes
\rCarriage returnYesYesYes
\tTabYesYesYes
\\BackslashYesYesYes
\"Double quoteYesYesYes
\'Single quoteYesYesNo
\bBackspaceYesYesYes
\fForm feedYesYesYes
\vVertical tabYesYesNo
\0Null characterYesYesNo
\xNNHex byteYesYesNo
\uNNNNUnicode (BMP)YesYesYes
\u{N..}Unicode (full)YesNoNo

JavaScript vs Python vs JSON: экранирование

Несмотря на то что все три формата используют синтаксис на основе обратной косой черты, они различаются допустимыми последовательностями и обработкой граничных случаев. Использование неправильного режима даёт вывод, выглядящий корректным, но не проходящий разбор.

JavaScript
Поддерживает шестнадцатеричные escape-последовательности \x, \u{...} для полного диапазона Unicode (за пределами BMP), \v для вертикальной табуляции и \0 для нулевого символа. Экранировать можно как одинарные, так и двойные кавычки. Шаблонные литералы (обратные кавычки) устраняют большинство потребностей в экранировании.
Python
Те же базовые последовательности, что и в JavaScript, плюс шестнадцатеричные escapes \x и \N{name} для именованных Unicode-символов. Сырые строки (r"...") полностью отключают обработку escape-последовательностей. Экранировать можно и одинарные, и двойные кавычки.
JSON
Самый ограниченный формат. Допустимы только \" (двойная кавычка), \\, \/, \n, \r, \t, \b, \f и \uNNNN. Одинарные кавычки не экранируются (строки JSON всегда заключаются в двойные). Нет шестнадцатеричных escape, нет \v, нет \0. Любой управляющий символ (U+0000 — U+001F) должен записываться в нотации \uNNNN.

Примеры кода

Примеры экранирования и снятия экранирования строк на JavaScript, Python, Go и в командной строке.

JavaScript
// Escape a string with special characters
const raw = 'Line 1\nLine 2\tTabbed "quoted"';
const escaped = JSON.stringify(raw);
// → '"Line 1\\nLine 2\\tTabbed \\"quoted\\""'

// Unescape a JSON string value
const input = '"Hello\\nWorld"';
const unescaped = JSON.parse(input);
// → "Hello\nWorld" (actual newline character)

// Template literals don't need quote escaping
const tpl = `She said "hello"`;
// → 'She said "hello"' — no backslashes needed

// Escape for use inside a RegExp
const query = 'price: $5.00 (USD)';
const safe = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// → "price: \\$5\\.00 \\(USD\\)"
Python
# Escape with repr() — shows escape sequences
raw = "Line 1\nLine 2\t'quoted'"
print(repr(raw))
# → "Line 1\nLine 2\t'quoted'"

# Raw strings skip escape processing
path = r"C:\Users\name\Documents"
print(path)
# → C:\Users\name\Documents (backslashes kept literal)

# JSON escaping with json module
import json
data = 'He said "hello\nworld"'
escaped = json.dumps(data)
# → '"He said \\"hello\\nworld\\""'

# Unicode escaping
text = "Caf\u00e9"  # → "Café"
print(text.encode('unicode_escape').decode())
# → "Caf\\xe9"
Go
package main

import (
    "fmt"
    "strconv"
    "encoding/json"
)

func main() {
    // strconv.Quote adds escape sequences and wraps in quotes
    raw := "Line 1\nLine 2\t\"quoted\""
    fmt.Println(strconv.Quote(raw))
    // → "\"Line 1\\nLine 2\\t\\\"quoted\\\"\""

    // strconv.Unquote reverses it
    unescaped, _ := strconv.Unquote(`"hello\nworld"`)
    fmt.Println(unescaped)
    // → hello
    //   world

    // JSON marshal handles escaping automatically
    b, _ := json.Marshal("tabs\there & \"quotes\"")
    fmt.Println(string(b))
    // → "tabs\there \u0026 \"quotes\""
}
CLI (Bash)
# Use $'...' syntax for escape sequences in bash
echo $'Line 1\nLine 2\tTabbed'
# → Line 1
#    Line 2	Tabbed

# printf interprets escape sequences
printf 'Path: C:\\Users\\name\n'
# → Path: C:\Users\name

# Use jq to escape a string for JSON
echo 'He said "hello"' | jq -Rs .
# → "He said \"hello\"\n"

# Unescape JSON string with jq
echo '"Line 1\\nLine 2"' | jq -r .
# → Line 1
#    Line 2

Часто задаваемые вопросы

В чём разница между экранированием и кодированием?
Экранирование добавляет обратные слеши перед специальными символами внутри строкового литерала, чтобы парсер языка воспринимал их как данные, а не синтаксис. Кодирование преобразует всю строку в другое представление — например, Base64-кодирование переводит двоичные данные в ASCII-текст, а URL-кодирование заменяет небезопасные символы на percent-hex-последовательности. Экранирование сохраняет читаемость; кодирование полностью меняет формат.
Почему в моей строке двойные обратные слеши (\\\\) вместо одинарных?
Двойные обратные слеши появляются, когда строка была экранирована дважды. Это часто происходит, когда данные проходят через несколько слоёв сериализации — например, значение JSON, хранящееся внутри другой JSON-строки, или строка лога, JSON-закодированная перед записью в файл. Чтобы исправить это, снимайте экранирование по одному слою за раз до получения исходного содержимого.
Как экранировать строку для JSON в JavaScript?
Используйте JSON.stringify(). Он заключает строку в двойные кавычки и экранирует все символы, требуемые JSON: обратные слеши, двойные кавычки, переводы строк, табуляции и управляющие символы до U+0020. Если нужно только внутреннее содержимое без обрамляющих кавычек, используйте JSON.stringify(str).slice(1, -1).
Могут ли строки JSON содержать одинарные кавычки?
Нет. Спецификация JSON (RFC 8259) требует, чтобы все строки ограничивались двойными кавычками. Одинарные кавычки не являются допустимыми разделителями строк в JSON. Хотя некоторые мягкие парсеры их принимают, любой стандартный JSON-парсер отвергнет строку в одинарных кавычках. Если ваша строка содержит символ одинарной кавычки, он может присутствовать как есть внутри JSON в двойных кавычках — экранирование не требуется.
Что такое сырая строка в Python?
Сырая строка (с префиксом r, например r"C:\Users\name") указывает интерпретатору Python обрабатывать обратные слеши как буквальные символы, а не как маркеры экранирования. Это удобно для путей Windows, регулярных выражений и любых строк, где обратные слеши должны сохраняться. Обратите внимание: сырая строка не может заканчиваться нечётным числом обратных слешей, так как крайний слеш экранировал бы закрывающую кавычку.
Как экранировать Unicode-символы в JavaScript?
JavaScript поддерживает две формы Unicode escape. Синтаксис \uNNNN обрабатывает символы базового многоязыкового плана (U+0000 — U+FFFF), например \u00e9 для «e с акутом». Для символов за пределами BMP (эмодзи, редкие письменности) используйте \u{NNNNN} с до шести шестнадцатеричными цифрами — например, \u{1F600} для эмодзи с улыбкой. Форма \u{'} была введена в ES2015.
Связано ли экранирование строк с безопасностью (XSS, SQL-инъекции)?
Экранирование на уровне языка и экранирование для безопасности служат разным целям, но идея одна: предотвращение интерпретации специальных символов как кода. Для защиты от XSS экранируют HTML-сущности (<, >, &). От SQL-инъекций защищают параметризованные запросы, а не ручное экранирование. Данный инструмент выполняет экранирование на уровне языка (backslash-последовательности), а не HTML или SQL.