Utilia

Escapování a unescapování řetězců

Escapuj nebo unescapuj řetězec pro JSON, JavaScript, šablonové literály, SQL, CSV, atributy HTML, regulární výrazy a adresy URL přímo ve svém prohlížeči.

Jak escapovat nebo unescapovat řetězec

  1. V poli Formát vyber cíl: řetězec JSON, řetězec JavaScriptu, šablonový literál JavaScriptu, řetězcový literál SQL, pole CSV, hodnotu atributu HTML, regulární výraz nebo součást URL.
  2. Napiš nebo vlož text do vstupního pole.
  3. Klikni na Escapovat, aby se z prostého textu stal bezpečný literál, nebo na Unescapovat, aby se z literálu stal opět prostý text. Výsledek se aktualizuje během psaní ve směru, který jsi zvolil naposledy.
  4. Uprav volby zobrazené pro daný formát: Přidat okolní uvozovky, Escapovat znaky mimo ASCII nebo Mezery jako + (data formuláře).
  5. Klikni na Kopírovat, nebo na Použít výstup jako vstup, čímž operaci obrátíš a ověříš zpáteční cestu.

Počty znaků před a po se zobrazují pod tlačítky. Všechno běží ve tvém prohlížeči; nic se nenahrává.

Co který formát dělá

  • Řetězec JSON: escapuje ", \ a řídicí znaky (\n, \t, \u0000…), přesně jako JSON.stringify. S volbou Escapovat znaky mimo ASCII se každý znak nad U+007E změní na \uXXXX (emoji se stanou dvojicí náhradních znaků, například 😀). Unescapování přijímá text s dvojitými uvozovkami i bez nich a toleruje holá zalomení řádků.
  • Řetězec JavaScriptu (‘…’): escapuje zpětné lomítko, jednoduchou uvozovku, zalomení řádků a řídicí znaky, plus U+2028 a U+2029, které rozbíjejí starší enginy. Unescapování rozumí \x41, A, \u{1F600}, historickým osmičkovým escape sekvencím jako \101 a pokračování řádku.
  • Šablonový literál JavaScriptu (`…`): escapuje zpětné apostrofy, zpětná lomítka a ${, aby se nevyhodnocoval žádný výraz; zalomení řádků a tabulátory zůstávají, protože je šablonové literály povolují.
  • Řetězcový literál SQL (‘…’): zdvojuje jednoduché uvozovky (O'Brien → 'O''Brien'), jako ve standardním SQL. Unescapování odmítne uvozovku, která není zdvojená. Zpětná lomítka se nechávají: MySQL ve výchozím režimu považuje \ také za escape znak, takže si ověř pravidla své databáze.
  • Pole CSV (RFC 4180): obalí pole dvojitými uvozovkami a zdvojí vnitřní uvozovky, pokud obsahuje čárku, středník, tabulátor, uvozovku, zalomení řádku nebo úvodní či koncovou mezeru. Volba Přidat okolní uvozovky uvozovky vynutí.
  • Hodnota atributu HTML: nahradí &, <, >, " a ' entitami, což je bezpečné v atributech s jednoduchými i dvojitými uvozovkami. Unescapování dekóduje číselné reference a &amp;, &lt;, &gt;, &quot;, &apos; a &nbsp;.
  • Regulární výraz (doslovný text): escapuje zpětným lomítkem . * + ? ^ $ { } ( ) | [ ] \ /, plus zalomení řádků a tabulátory, takže výraz odpovídá textu doslova. Výsledek je platný s příznakem u i bez něj.
  • Součást URL (procentové kódování): funguje jako encodeURIComponent a kóduje vše kromě písmen, číslic a znaků - _ . ! ~ * ' ( ) jako bajty UTF-8. Volba Mezery jako + (data formuláře) používá konvenci application/x-www-form-urlencoded.

Escapování není bezpečnostní hranice pro SQL

Když zvolíš SQL, nástroj zobrazí upozornění, které stojí za zopakování: skutečným řešením SQL injection je parametrizovaný dotaz (prepared statement), kde se hodnota posílá odděleně od textu SQL. Ruční escapování je křehké: závisí na databázi, znakové sadě spojení a nastavení, jako je zpracování zpětných lomítek v MySQL. Tento výstup používej ke čtení protokolů, psaní testovacích dat nebo ladění dotazu, nikdy k sestavování dotazů z uživatelských vstupů.

U CSV nástroj také varuje, když hodnota začíná znakem =, +, - nebo @: tabulkový procesor ji může spustit jako vzorec (CSV injection). Uvozovky tomu nezabrání; obvyklým opatřením je přidat před hodnotu apostrof nebo mezeru.

Časté dotazy

V čem se liší řetězec JSON od řetězce JavaScriptu?

JSON povoluje jen dvojité uvozovky a malou sadu escape sekvencí (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript přijímá také jednoduché uvozovky, zpětné apostrofy, \x41, \u{…}, \v a \0. Platné escape sekvence JSON jsou platné i v JavaScriptu, ale ne naopak.

Proč unescapování selže s hláškou „Neplatná escape sekvence“?

Text obsahuje zpětné lomítko následované něčím, co formát nepovoluje, například \u12 s méně než čtyřmi šestnáctkovými číslicemi nebo osamocené zpětné lomítko na konci. Chybová zpráva ukazuje vadnou sekvenci.

Potřebuje CSV uvozovky kolem každého pole?

Ne. RFC 4180 vyžaduje uvozovky, jen když pole obsahuje čárku, dvojitou uvozovku nebo zalomení řádku. Tento nástroj uvozuje i středníky, tabulátory a úvodní či koncové mezery, protože je mnoho tabulkových procesorů používá jako oddělovače nebo je ořezává.

Stačí escapování atributu HTML jako ochrana proti XSS?

Je správné pro text vložený do hodnoty atributu v uvozovkách. Nestačí u atributů, které jsou samy kódem nebo adresou URL, například onclick nebo href="javascript:…"; ty potřebují validaci, nejen escapování.

Odesílá se můj text na server?

Ne. Všechny převody běží lokálně ve tvém prohlížeči, takže můžeš bez obav vkládat hodnoty konfigurace nebo data, která s nikým nesdílíš.