Екранування рядків — це процес додавання зворотної косої риски (або іншого маркера) перед символами, що мають спеціальне значення всередині рядкового літерала. Коли синтаксичний аналізатор мови програмування зустрічає подвійні лапки всередині рядка в подвійних лапках, він сприймає їх як кінець рядка. Екранування лапки зворотною косою рискою — написання \" замість " — повідомляє аналізатору, що це звичайний символ, а не роздільник. Кожна мова, яка використовує рядкові літерали, має свої правила екранування, хоча конкретні послідовності відрізняються.
Найпоширеніші escape-послідовності відповідають пробільним і керуючим символам, які не можуть безпосередньо з'являтися у вихідному коді. Символ нового рядка стає \n, табуляція — \t, а звичайна зворотна коса риска — \\. Ці угоди беруть початок з мови програмування C (ISO/IEC 9899) і були прийняті в JavaScript (ECMA-262), Python, Java, Go і Rust. JSON (RFC 8259) використовує ту саму синтаксичну систему, але підтримує менший набір послідовностей.
Знекранування (іноді зване «de-escaping») — зворотна операція: перетворення escape-послідовностей назад на їхні вихідні символи. Це часто потрібно під час читання лог-файлів, розбору відповідей 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 поруч, щоб зрозуміти відмінності.
Довідник escape-послідовностей
Таблиця нижче містить поширені escape-послідовності та вказує, чи підтримуються вони в JavaScript, Python і JSON. Усі три мови поділяють основний набір (новий рядок, табуляція, зворотна коса риска, подвійні лапки), але різняться щодо одинарних лапок, шістнадцяткових екранувань і розширеної нотації Unicode.
Послідовність
Значення
JavaScript
Python
JSON
\n
Newline (LF)
Yes
Yes
Yes
\r
Carriage return
Yes
Yes
Yes
\t
Tab
Yes
Yes
Yes
\\
Backslash
Yes
Yes
Yes
\"
Double quote
Yes
Yes
Yes
\'
Single quote
Yes
Yes
No
\b
Backspace
Yes
Yes
Yes
\f
Form feed
Yes
Yes
Yes
\v
Vertical tab
Yes
Yes
No
\0
Null character
Yes
Yes
No
\xNN
Hex byte
Yes
Yes
No
\uNNNN
Unicode (BMP)
Yes
Yes
Yes
\u{N..}
Unicode (full)
Yes
No
No
JavaScript проти Python проти JSON: екранування
Хоча ці три формати використовують однаковий синтаксис на основі зворотної косої риски, вони різняться тим, які послідовності є допустимими і як обробляють граничні випадки. Вибір неправильного режиму дає результат, який виглядає правильно, але не проходить аналіз під час виконання.
JavaScript
Підтримує \x шістнадцяткові екранування, \u{...} для повного діапазону Unicode (за межами BMP), \v для вертикальної табуляції та \0 для нульового символу. Можна екранувати як одинарні, так і подвійні лапки. Шаблонні літерали (зворотні лапки) усувають потребу в більшості екранувань.
Python
Ті самі основні послідовності, що й у JavaScript, плюс \x шістнадцяткові екранування та \N{name} для іменованих символів Unicode. Сирі рядки (r"...") повністю вимикають обробку екранування. Можна екранувати як одинарні, так і подвійні лапки.
JSON
Найбільш обмежений формат. Допустимі лише \" (подвійні лапки), \\, \/, \n, \r, \t, \b, \f і \uNNNN. Немає екранування одинарних лапок (рядки JSON завжди використовують подвійні лапки). Немає шістнадцяткових екранувань, немає \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"
# 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-екранування. Синтаксис \uNNNN обробляє символи в базовій багатомовній площині (U+0000 до U+FFFF), наприклад \u00e9 для «e з акутом». Для символів за межами BMP (емодзі, рідкісні писемності) використовуйте \u{NNNNN} з до шести шістнадцяткових цифр — наприклад, \u{1F600} для емодзі посміхаючогося обличчя. Форма \u{'} була введена в ES2015.
Чи пов'язане екранування рядків із безпекою (XSS, SQL-ін'єкції)?
Екранування на рівні мови та екранування для безпеки служать різним цілям, але ідея однакова: запобігання інтерпретації спеціальних символів як коду. Для захисту від XSS екрануються HTML-сутності (<, >, &). Для захисту від SQL-ін'єкцій використовуються параметризовані запити замість ручного екранування. Цей інструмент обробляє екранування рядків на рівні мови (послідовності зі зворотною косою рискою), а не HTML або SQL екранування.