Escapowanie znaków polega na wstawieniu odwrotnego ukośnika (lub innego znacznika) przed znakami mającymi specjalne znaczenie wewnątrz literału ciągu znaków. Gdy parser języka programowania napotka cudzysłów wewnątrz ciągu ujętego w cudzysłowy, traktuje go jako koniec ciągu. Escapowanie cudzysłowu odwrotnym ukośnikiem — zapisanie \" zamiast " — informuje parser, że należy traktować go jako dosłowny znak, a nie ogranicznik. Każdy język korzystający z literałów ciągów ma swoje reguły escapowania, choć konkretne sekwencje mogą się różnić.
Najczęstsze sekwencje ucieczki odpowiadają znakom białym i znakom sterującym, które nie mogą pojawić się bezpośrednio w kodzie źródłowym. Znak nowej linii staje się \n, tabulator staje się \t, a dosłowny odwrotny ukośnik staje się \\. Konwencje te wywodzą się z języka C (ISO/IEC 9899) i zostały przyjęte przez JavaScript (ECMA-262), Python, Java, Go i Rust. JSON (RFC 8259) stosuje tę samą składnię, ale obsługuje mniejszy zestaw sekwencji.
De-escapowanie (niekiedy zwane "odwrotnym escapowaniem") to operacja odwrotna: przekształcanie sekwencji ucieczki z powrotem w oryginalne znaki. Jest powszechnie stosowane podczas czytania plików dziennika, parsowania odpowiedzi API lub debugowania danych, które zostały podwójnie escapowane. Obie operacje są mechaniczne i podatne na błędy przy wykonywaniu ręcznie, dlatego programiści sięgają po narzędzie do escapowania/de-escapowania podczas pracy z ciągami wieloliniowymi, osadzonymi cudzysłowami lub znakami Unicode.
Dlaczego warto używać narzędzia do escapowania online?
Ręczne dodawanie lub usuwanie odwrotnych ukośników jest żmudne i łatwe do wykonania błędnie, szczególnie przy zagnieżdżonych cudzysłowach lub wieloliniowym wejściu. Przeglądarkowe narzędzie do escapowania daje natychmiastowe wyniki bez konieczności konfigurowania REPL-a ani pisania jednorazowych skryptów.
⚡
Natychmiastowa konwersja
Wklej tekst i uzyskaj escapowany lub de-escapowany wynik natychmiast. Nie ma potrzeby otwierania terminala, uruchamiania REPL-a ani pisania jednorazowego skryptu.
🔀
Przełączanie między formatami
Przełączaj między trybami escapowania JavaScript, Python i JSON. Każdy język inaczej obsługuje pojedyncze cudzysłowy, Unicode i znaki sterujące — narzędzie automatycznie stosuje właściwe reguły.
🔒
Przetwarzanie z zachowaniem prywatności
Całe escapowanie i de-escapowanie odbywa się w przeglądarce za pomocą JavaScript. Twoje ciągi znaków nigdy nie są wysyłane na serwer, co ma znaczenie podczas pracy z kluczami API, tokenami lub danymi użytkownika.
📋
Bez logowania i instalacji
Otwórz stronę i zacznij wklejać. Nie ma konta do założenia, rozszerzenia do zainstalowania ani zgody na pliki cookie blokującej narzędzie.
Przypadki użycia escapowania znaków
Tworzenie frontendu
Escapuj treści generowane przez użytkownika przed wstrzyknięciem ich do atrybutów HTML, skryptów inline lub literałów szablonów. Zapobiega uszkodzonemu znacznikowaniu i wektorom XSS wynikającym z nieescapowanych cudzysłowów lub nawiasów kątowych.
Integracja z API backendu
Twórz treści żądań JSON z osadzonymi ciągami zawierającymi znaki nowej linii, tabulatory lub cudzysłowy. Właściwe escapowanie zapobiega nieprawidłowemu JSON-owi, który powodowałby błędy 400 po stronie odbierającego API.
DevOps i konfiguracja
Pisz escapowane ciągi dla plików konfiguracyjnych JSON, heredoców YAML lub zmiennych środowiskowych. Błędnie umieszczony odwrotny ukośnik w Dockerfile ENV lub Kubernetes ConfigMap może zepsuć wdrożenie.
QA i dane testowe
Generuj ciągi testowe z osadzonymi znakami sterującymi, sekwencjami Unicode i zagnieżdżonymi cudzysłowami. Te graniczne ciągi są potrzebne do weryfikacji, że parsery i serializatory poprawnie obsługują znaki specjalne.
Inżynieria danych
Oczyszczaj podwójnie escapowane dane z eksportów CSV, agregatów logów lub zrzutów baz danych. Pola przechodzące przez wiele warstw serializacji często gromadzą dodatkowe odwrotne ukośniki, które trzeba usunąć.
Nauka i debugowanie
Sprawdzaj, jak różne języki reprezentują ten sam ciąg znaków. Studenci i programiści nowi w danym języku mogą porównywać escapowanie JavaScript, Python i JSON obok siebie, aby zrozumieć różnice.
Tabela sekwencji ucieczki
Poniższa tabela zawiera listę powszechnych sekwencji ucieczki oraz informację, czy są obsługiwane w JavaScript, Python i JSON. Wszystkie trzy języki współdzielą podstawowy zestaw (nowa linia, tabulator, odwrotny ukośnik, cudzysłów), ale różnią się w zakresie pojedynczych cudzysłowów, sekwencji szesnastkowych i rozszerzonej notacji Unicode.
Sekwencja
Znaczenie
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 vs Python vs JSON — porównanie escapowania
Chociaż te trzy formaty korzystają z tej samej składni opartej na odwrotnym ukośniku, różnią się pod względem tego, które sekwencje są prawidłowe i jak obsługują przypadki brzegowe. Wybór niewłaściwego trybu daje wynik, który wygląda poprawnie, ale zawodzi w czasie parsowania.
JavaScript
Obsługuje sekwencje szesnastkowe \x, \u{...} dla pełnego zakresu Unicode (poza BMP), \v dla tabulatora pionowego i \0 dla null. Można escapować zarówno pojedyncze, jak i podwójne cudzysłowy. Literały szablonów (backtick) eliminują większość potrzeb escapowania.
Python
Te same podstawowe sekwencje co JavaScript, plus sekwencje szesnastkowe \x i \N{name} dla nazwanych znaków Unicode. Surowe ciągi (r"...") całkowicie wyłączają przetwarzanie sekwencji ucieczki. Zarówno pojedyncze, jak i podwójne cudzysłowy można escapować.
JSON
Najbardziej restrykcyjny format. Prawidłowe są tylko \" (cudzysłów), \\, \/, \n, \r, \t, \b, \f i \uNNNN. Brak escapowania pojedynczego cudzysłowu (ciągi JSON zawsze używają podwójnych cudzysłowów). Brak sekwencji szesnastkowych, brak \v, brak \0. Każdy znak sterujący (U+0000 do U+001F) musi używać notacji \uNNNN.
Przykłady kodu
Przykłady escapowania i de-escapowania ciągów znaków w JavaScript, Python, Go i wierszu poleceń.
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
Często zadawane pytania
Jaka jest różnica między escapowaniem a kodowaniem?
Escapowanie dodaje odwrotne ukośniki przed znakami specjalnymi wewnątrz literału ciągu, aby parser języka traktował je jako dane, a nie składnię. Kodowanie przekształca cały ciąg w inną reprezentację — na przykład kodowanie Base64 konwertuje dane binarne na tekst ASCII, a kodowanie URL zastępuje niebezpieczne znaki sekwencjami procent-szesnastkowo. Escapowanie zachowuje czytelność; kodowanie zmienia format całkowicie.
Dlaczego mój ciąg ma podwójne odwrotne ukośniki (\\\\) zamiast pojedynczych?
Podwójne odwrotne ukośniki pojawiają się, gdy ciąg jest escapowany dwukrotnie. Zdarza się to często, gdy dane przechodzą przez wiele warstw serializacji — na przykład wartość JSON przechowywana wewnątrz innego ciągu JSON lub linia logu zakodowana w JSON przed zapisem do pliku. Aby to naprawić, de-escapuj ciąg warstwa po warstwie, aż dotrzesz do oryginalnej treści.
Jak escapować ciąg dla JSON w JavaScript?
Użyj JSON.stringify(). Opakowuje ciąg w podwójne cudzysłowy i escapuje wszystkie wymagane przez JSON znaki: odwrotne ukośniki, cudzysłowy, znaki nowej linii, tabulatory i znaki sterujące poniżej U+0020. Jeśli potrzebujesz tylko wewnętrznej treści bez otaczających cudzysłowów, użyj JSON.stringify(str).slice(1, -1).
Czy ciągi JSON mogą zawierać pojedyncze cudzysłowy?
Nie. Specyfikacja JSON (RFC 8259) wymaga, aby wszystkie ciągi były ograniczone podwójnymi cudzysłowami. Pojedyncze cudzysłowy nie są prawidłowymi ogranicznikami ciągów w JSON. Choć niektóre liberalne parsery je akceptują, każdy standardowy parser JSON odrzuci ciąg ujęty w pojedyncze cudzysłowy. Jeśli Twój ciąg zawiera znak pojedynczego cudzysłowu, może pojawić się bez zmian wewnątrz JSON ujętego w podwójne cudzysłowy — bez potrzeby escapowania.
Czym jest surowy ciąg znaków w Pythonie?
Surowy ciąg (poprzedzony r, jak r"C:\Users\name") nakazuje interpreterowi Pythona traktować odwrotne ukośniki jako dosłowne znaki zamiast markerów ucieczki. Jest przydatny dla ścieżek plików Windows, wyrażeń regularnych i każdego ciągu, w którym odwrotne ukośniki powinny być zachowane. Należy pamiętać, że surowy ciąg nie może kończyć się nieparzystą liczbą odwrotnych ukośników, ponieważ końcowy ukośnik escapowałby zamykający cudzysłów.
Jak escapować znaki Unicode w JavaScript?
JavaScript obsługuje dwa formaty ucieczki Unicode. Składnia \uNNNN obsługuje znaki z Podstawowej Płaszczyzny Wielojęzycznej (U+0000 do U+FFFF), np. \u00e9 dla 'e z akutem'. Dla znaków spoza BMP (emoji, rzadkie skrypty) użyj \u{NNNNN} z maksymalnie sześcioma cyframi szesnastkowymi — na przykład \u{1F600} dla emoji uśmiechniętej buzi. Forma \u{'} została wprowadzona w ES2015.
Czy escapowanie znaków jest związane z bezpieczeństwem (XSS, SQL injection)?
Escapowanie na poziomie języka i escapowanie dla bezpieczeństwa służą różnym celom, ale idea jest ta sama: zapobieganie interpretowaniu znaków specjalnych jako kodu. Do zapobiegania XSS escapujesz encje HTML (<, >, &). Do ochrony przed SQL injection używasz zapytań parametrycznych zamiast ręcznego escapowania. To narzędzie obsługuje escapowanie ciągów na poziomie języka (sekwencje odwrotnego ukośnika), a nie escapowanie HTML ani SQL.