ToolDeck

String Escape

Escapování a unescapování řetězců pro JavaScript, Python a JSON

Zkusit příklad

Vstup

Výstup

Běží lokálně · Bezpečné pro vkládání tajných údajů
Výsledek se zobrazí zde…
Režim:

Co je escapování řetězců?

Escapování řetězců je proces vkládání zpětného lomítka (nebo jiného znaku) před znaky, které mají ve stringovém literálu zvláštní význam. Když parser programovacího jazyka narazí na dvojitou uvozovku uvnitř řetězce ohraničeného dvojitými uvozovkami, považuje ji za konec řetězce. Escapování uvozovky zpětným lomítkem — zapsáním \" místo " — říká parseru, aby ji považoval za doslovný znak, nikoli za oddělovač. Každý jazyk, který používá stringové literály, má pravidla pro escapování, i když se přesné sekvence liší.

Nejčastější escape sekvence odpovídají bílým znakům a řídicím znakům, které nemohou přímo figurovat ve zdrojovém kódu. Nový řádek se zapíše jako \n, tabulátor jako \t a doslovné zpětné lomítko jako \\. Tyto konvence pocházejí z programovacího jazyka C (ISO/IEC 9899) a byly převzaty JavaScriptem (ECMA-262), Pythonem, Javou, Go a Rustem. JSON (RFC 8259) používá stejnou syntaxi, ale podporuje menší sadu sekvencí.

Unescapování (někdy nazývané "de-escapování") je opačná operace: převod escape sekvencí zpět na původní znaky. To se hodí při čtení log souborů, zpracování odpovědí API nebo ladění dat, která byla escapována vícekrát. Obě operace jsou mechanické a při ručním provádění náchylné k chybám, proto vývojáři sahají po nástroji pro escapování/unescapování při práci s víceřádkovými řetězci, vnořenými uvozovkami nebo znaky Unicode.

Proč používat online nástroj pro escapování řetězců?

Ruční přidávání nebo odstraňování zpětných lomítek je zdlouhavé a snadno se dopustíte chyby, zejména u vnořených uvozovek nebo víceřádkového vstupu. Nástroj pro escapování řetězců v prohlížeči poskytuje okamžité výsledky bez nutnosti spouštět REPL nebo psát jednorázové skripty.

Okamžitý převod
Vložte text a ihned získejte escapovaný nebo unescapovaný výsledek. Není třeba otevírat terminál, spouštět REPL ani psát jednorázový skript.
🔀
Přepínání mezi formáty
Přepínejte mezi režimy escapování pro JavaScript, Python a JSON. Každý jazyk zachází jinak s jednoduchými uvozovkami, Unicode a řídicími znaky — nástroj automaticky aplikuje správná pravidla.
🔒
Zpracování s důrazem na soukromí
Veškeré escapování a unescapování probíhá ve vašem prohlížeči pomocí JavaScriptu. Vaše řetězce nejsou nikdy odesílány na server, což je důležité při práci s API klíči, tokeny nebo uživatelskými daty.
📋
Bez přihlášení nebo instalace
Otevřete stránku a začněte vkládat. Není třeba vytvářet účet, instalovat rozšíření ani překonávat souhlas s cookies blokující nástroj.

Případy použití escapování řetězců

Vývoj frontendu
Escapujte obsah generovaný uživateli před vložením do HTML atributů, inline skriptů nebo šablonových literálů. Zabrání poškozené struktuře HTML a vektorům XSS z neescapovaných uvozovek nebo lomených závorek.
Integrace backendového API
Sestavujte těla JSON požadavků s vloženými řetězci obsahujícími nové řádky, tabulátory nebo uvozovky. Správné escapování zabrání nesprávně formátovanému JSON, který by způsobil chyby 400 na straně přijímajícího API.
DevOps a konfigurace
Zapisujte escapované řetězce do JSON konfiguračních souborů, YAML heredoků nebo proměnných prostředí. Chybně umístěné zpětné lomítko v Dockerfile ENV nebo Kubernetes ConfigMap může narušit nasazení.
QA a testovací data
Generujte testovací řetězce s vloženými řídicími znaky, sekvencemi Unicode a vnořenými uvozovkami. Tyto hraniční řetězce jsou potřeba k ověření, že parsery a serializátory správně zpracovávají speciální znaky.
Datové inženýrství
Vyčistěte dvojitě escapovaná data z exportů CSV, agregátorů logů nebo databázových dumpů. Pole procházející více vrstvami serializace často hromadí nadbytečná zpětná lomítka, která je třeba odstranit.
Výuka a ladění
Zjistěte, jak různé jazyky reprezentují stejný řetězec. Studenti a vývojáři, kteří se s jazykem teprve seznamují, mohou porovnat escapování v JavaScriptu, Pythonu a JSON vedle sebe a pochopit rozdíly.

Přehled escape sekvencí

Níže uvedená tabulka obsahuje běžné escape sekvence a informaci o tom, zda jsou podporovány v JavaScriptu, Pythonu a JSON. Všechny tři jazyky sdílejí základní sadu (nový řádek, tabulátor, zpětné lomítko, dvojitá uvozovka), ale liší se v jednoduchých uvozovkách, hex escapování a rozšíreném zápisu Unicode.

SekvenceVýznamJavaScriptPythonJSON
\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 — srovnání escapování

Ačkoli tyto tři formáty sdílejí stejnou syntaxi se zpětnými lomítky, liší se v tom, které sekvence jsou platné a jak zpracovávají hraniční případy. Výběr nesprávného režimu produkuje výstup, který vypadá správně, ale selže při parsování.

JavaScript
Podporuje \x hex escapování, \u{...} pro celý rozsah Unicode (nad BMP), \v pro vertikální tabulátor a \0 pro null. Lze escapovat jednoduché i dvojité uvozovky. Šablonové literály (backticky) se většině escapování vyhýbají.
Python
Stejné základní sekvence jako JavaScript, navíc \x hex escapování a \N{name} pro pojmenované znaky Unicode. Surové řetězce (r"...") zcela vypínají zpracování escape sekvencí. Lze escapovat jednoduché i dvojité uvozovky.
JSON
Nejrestriktivnější formát. Platné jsou pouze \" (dvojitá uvozovka), \\, \/, \n, \r, \t, \b, \f a \uNNNN. Žádné escapování jednoduchých uvozovek (řetězce JSON vždy používají dvojité uvozovky). Žádné hex escapování, žádné \v, žádné \0. Každý řídicí znak (U+0000 až U+001F) musí být zapsán jako \uNNNN.

Příklady kódu

Příklady escapování a unescapování řetězců v JavaScriptu, Pythonu, Go a na příkazovém řádku.

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

Často kladené otázky

Jaký je rozdíl mezi escapováním a kódováním?
Escapování přidává zpětná lomítka před speciální znaky uvnitř stringového literálu, aby je parser jazyka považoval za data, nikoli za syntaxi. Kódování transformuje celý řetězec do jiné reprezentace — například Base64 kódování převádí binární data na ASCII text a URL kódování nahrazuje nebezpečné znaky sekvencemi ve formátu procento-hex. Escapování zachovává čitelnost; kódování zcela mění formát.
Proč má můj řetězec dvojitá zpětná lomítka (\\\\) místo jednoduchých?
Dvojitá zpětná lomítka se objevují, když je řetězec escapován dvakrát. Stává se to často, když data procházejí více vrstvami serializace — například hodnota JSON uložená uvnitř jiného JSON řetězce nebo řádek logu, který byl JSON-zakódován před zápisem do souboru. Opravte to tak, že řetězec unescapujete po jedné vrstvě, dokud nedosáhnete původního obsahu.
Jak escapovat řetězec pro JSON v JavaScriptu?
Použijte JSON.stringify(). Obalí řetězec dvojitými uvozovkami a escapuje všechny znaky vyžadované JSON: zpětná lomítka, dvojité uvozovky, nové řádky, tabulátory a řídicí znaky pod U+0020. Pokud chcete pouze vnitřní obsah bez okolních uvozovek, použijte JSON.stringify(str).slice(1, -1).
Mohou řetězce JSON obsahovat jednoduché uvozovky?
Ne. Specifikace JSON (RFC 8259) vyžaduje, aby všechny řetězce byly ohraničeny dvojitými uvozovkami. Jednoduché uvozovky nejsou v JSON platnými oddělovači řetězců. Přestože některé shovívavé parsery je akceptují, každý standardní JSON parser řetězec ohraničený jednoduchými uvozovkami odmítne. Pokud váš řetězec obsahuje znak jednoduché uvozovky, může se uvnitř JSON ohraničeného dvojitými uvozovkami objevit tak, jak je — bez escapování.
Co je surový řetězec v Pythonu?
Surový řetězec (s předponou r, jako r"C:\Users\name") říká interpretu Pythonu, aby zpětná lomítka považoval za doslovné znaky místo escape markerů. To se hodí pro cesty k souborům ve Windows, regulární výrazy a jakýkoli řetězec, kde mají být zpětná lomítka zachována. Všimněte si, že surový řetězec nemůže končit lichým počtem zpětných lomítek, protože poslední zpětné lomítko by escapovalo uzavírající uvozovku.
Jak escapovat znaky Unicode v JavaScriptu?
JavaScript podporuje dvě formy Unicode escapování. Syntaxe \uNNNN zpracovává znaky v Basic Multilingual Plane (U+0000 až U+FFFF), například \u00e9 pro 'e s čárkou'. Pro znaky mimo BMP (emoji, vzácné skripty) použijte \u{NNNNN} s až šesti hex číslicemi — například \u{1F600} pro emoji širokého úsměvu. Forma \u{'} byla zavedena v ES2015.
Souvisí escapování řetězců se zabezpečením (XSS, SQL injection)?
Escapování na úrovni jazyka a escapování pro zabezpečení slouží různým účelům, ale myšlenka je stejná: zabránit tomu, aby byly speciální znaky interpretovány jako kód. Pro prevenci XSS escapujete HTML entity (<, >, &). Pro SQL injection používáte parametrizované dotazy místo ručního escapování. Tento nástroj řeší escapování řetězců na úrovni jazyka (sekvence se zpětnými lomítky), nikoli escapování HTML nebo SQL.