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.