Utilia

Escapowanie i unescape tekstu

Escapuj lub odescapuj tekst dla JSON, JavaScriptu, literałów szablonowych, SQL, CSV, atrybutów HTML, wyrażeń regularnych i adresów URL w przeglądarce.

Jak escapować lub odescapować tekst

  1. Wybierz cel w polu Format: ciąg JSON, ciąg JavaScript, literał szablonowy JavaScript, literał tekstowy SQL, pole CSV, wartość atrybutu HTML, wyrażenie regularne albo składnik URL.
  2. Wpisz lub wklej tekst w polu wejściowym.
  3. Kliknij Escapuj, aby zamienić zwykły tekst w bezpieczny literał, albo Unescape, aby zamienić literał z powrotem w zwykły tekst. Wynik aktualizuje się podczas pisania, w ostatnio wybranym kierunku.
  4. Dostosuj opcje wyświetlane dla danego formatu: Dodaj otaczające cudzysłowy, Escapuj znaki spoza ASCII lub Spacje jako + (dane formularza).
  5. Kliknij Kopiuj albo Użyj wyniku jako danych wejściowych, aby odwrócić operację i sprawdzić, czy tekst wraca do postaci wyjściowej.

Pod przyciskami widać liczbę znaków przed i po. Wszystko działa w twojej przeglądarce; nic nie jest przesyłane.

Co robi każdy format

  • Ciąg JSON: escapuje ", \ i znaki sterujące (\n, \t, \u0000…), dokładnie jak JSON.stringify. Z opcją Escapuj znaki spoza ASCII każdy znak powyżej U+007E staje się \uXXXX – polskie „ą” to ą, a emoji stają się parą surogatów, np. 😀. Unescape przyjmuje tekst z otaczającymi cudzysłowami lub bez nich i toleruje surowe końce linii.
  • Ciąg JavaScript (‘…’): escapuje ukośnik wsteczny, apostrof, końce linii i znaki sterujące, a także U+2028 i U+2029, które psują starsze silniki. Unescape rozumie \x41, A, \u{1F600}, dawne sekwencje ósemkowe, np. \101, oraz kontynuacje linii.
  • Literał szablonowy JavaScript (`…`): escapuje grawisy, ukośniki wsteczne i ${, aby żadne wyrażenie nie zostało wykonane; końce linii i tabulatory zostają bez zmian, bo literały szablonowe na nie pozwalają.
  • Literał tekstowy SQL (‘…’): podwaja apostrofy (O'Brien → 'O''Brien'), jak w standardowym SQL. Unescape odrzuca apostrof, który nie jest podwojony. Ukośniki wsteczne zostają nietknięte: MySQL w domyślnym trybie też traktuje \ jako znak ucieczki, więc sprawdź zasady swojej bazy.
  • Pole CSV (RFC 4180): otacza pole cudzysłowami i podwaja cudzysłowy wewnątrz, gdy zawiera ono przecinek, średnik, tabulator, cudzysłów, koniec linii lub spację na początku albo końcu. Dodaj otaczające cudzysłowy wymusza cudzysłowy.
  • Wartość atrybutu HTML: zamienia &, <, >, " i ' na encje, co jest bezpieczne w atrybutach zarówno w apostrofach, jak i w cudzysłowach. Unescape dekoduje odwołania numeryczne oraz &amp;, &lt;, &gt;, &quot;, &apos; i &nbsp;.
  • Wyrażenie regularne (dosłowny tekst): poprzedza ukośnikiem . * + ? ^ $ { } ( ) | [ ] \ / oraz końce linii i tabulatory, aby wzorzec dopasował tekst dosłownie. Wynik jest poprawny z flagą u i bez niej.
  • Składnik URL (percent-encoding): działa jak encodeURIComponent, kodując jako bajty UTF-8 wszystko oprócz liter, cyfr i - _ . ! ~ * ' ( ). Spacje jako + (dane formularza) stosuje konwencję application/x-www-form-urlencoded.

Escapowanie nie jest zabezpieczeniem SQL

Po wybraniu SQL narzędzie wyświetla przypomnienie i warto je powtórzyć: prawdziwym rozwiązaniem problemu SQL injection jest zapytanie parametryzowane (prepared statement), w którym wartość jest wysyłana osobno od tekstu SQL. Ręczne escapowanie jest kruche: zależy od bazy danych, zestawu znaków połączenia i ustawień, takich jak obsługa ukośnika wstecznego w MySQL. Używaj tego wyniku do czytania logów, pisania danych testowych czy debugowania zapytań, nigdy do budowania zapytań z danych od użytkownika.

W przypadku CSV narzędzie ostrzega też, gdy wartość zaczyna się od =, +, - lub @: arkusz kalkulacyjny może wykonać ją jako formułę (CSV injection). Cudzysłowy temu nie zapobiegają; typowym zabezpieczeniem jest poprzedzenie wartości apostrofem lub spacją.

Najczęściej zadawane pytania

Czym różni się ciąg JSON od ciągu JavaScript?

JSON dopuszcza tylko cudzysłowy podwójne i niewielki zestaw sekwencji (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript akceptuje też apostrofy, grawisy, \x41, \u{…}, \v i \0. Poprawne sekwencje JSON są poprawne w JavaScripcie, ale nie odwrotnie.

Dlaczego unescape kończy się błędem niepoprawnej sekwencji ucieczki?

Tekst zawiera ukośnik wsteczny, po którym stoi coś, na co format nie pozwala, np. \u12 z mniej niż czterema cyframi szesnastkowymi albo samotny ukośnik na końcu. Komunikat błędu pokazuje wadliwą sekwencję.

Czy w CSV każde pole musi być w cudzysłowie?

Nie. RFC 4180 wymaga cudzysłowów tylko wtedy, gdy pole zawiera przecinek, cudzysłów lub koniec linii. To narzędzie ujmuje w cudzysłowy także pola ze średnikami, tabulatorami i spacjami na początku lub końcu, bo wiele arkuszy – w tym polski Excel – używa ich jako separatorów albo je obcina.

Czy escapowanie atrybutu HTML wystarczy, by zapobiec XSS?

Jest poprawne dla tekstu umieszczanego w wartości atrybutu w cudzysłowie. Nie wystarcza dla atrybutów, które same są kodem lub adresem URL, np. onclick czy href="javascript:…"; te wymagają walidacji, a nie tylko escapowania.

Czy mój tekst jest wysyłany na serwer?

Nie. Wszystkie konwersje działają lokalnie w twojej przeglądarce, więc możesz bezpiecznie wklejać wartości konfiguracyjne czy dane, których nie chcesz nikomu udostępniać.