W Polsce pliki CSV eksportowane z Excela zwykle używają średnika zamiast przecinka jako separatora, bo przecinek jest separatorem dziesiętnym w polskim formacie liczb. Pole zawierające polskie znaki diakrytyczne i średnik, np. Kowalski; ąęćłńóśźż, trzeba więc ująć w cudzysłów: "Kowalski; ąęćłńóśźż", a cudzysłów wewnątrz samej wartości escapuje się przez podwojenie ("") — to zupełnie inna reguła niż backslash używany w JS czy JSON.
Escapowanie w ciągu JavaScript/JSON
W literałach ciągów JS i w JSON znaki specjalne escapuje się ukośnikiem wstecznym: \" dla cudzysłowu, \n dla nowej linii, \\ dla samego ukośnika wstecznego. JSON dodatkowo wymaga, by wszystkie ciągi używały cudzysłowów podwójnych — w przeciwieństwie do JS, gdzie dopuszczalne są też pojedyncze.
Escapowanie w poleceniach powłoki
W wierszu poleceń znakami specjalnymi są m.in. spacja, cudzysłowy, znak dolara, gwiazdka — mają one specjalne znaczenie dla powłoki (shell). Spację wewnątrz argumentu polecenia trzeba escapować albo cały argument ująć w cudzysłów, inaczej powłoka podzieli go na dwa osobne argumenty.
Escapowanie w wyrażeniach regularnych
W wyrażeniach regularnych znaki takie jak kropka, gwiazdka czy nawiasy mają specjalne znaczenie (dowolny znak, kwantyfikator, grupa). Aby dopasować je dosłownie, a nie jako metaznaki, poprzedza się je ukośnikiem wstecznym: \. dopasowuje dosłowną kropkę, a nie "dowolny znak".
Dlaczego każdy kontekst wymaga własnego escapowania
Błędy "podwójnego escapowania" lub "niepełnego escapowania" to jedna z najczęstszych przyczyn zepsutego kodu przy wstawianiu tekstu od użytkownika (np. ścieżki do pliku ze spacją) do polecenia lub ciągu znaków. Poprawne escapowanie zależy od tego, gdzie dokładnie tekst jest wstawiany, a nie od samego tekstu.
Do czego się to przydaje
- Przygotowanie tekstu użytkownika z polskimi znakami diakrytycznymi do bezpiecznego wstawienia w żądaniu JSON lub w pliku CSV z separatorem-średnikiem.
- Zbudowanie polecenia powłoki z dynamicznym argumentem bez ryzyka wstrzyknięcia poleceń.
- Escapowanie znaków specjalnych przed użyciem tekstu jako dosłownego wzorca w wyrażeniu regularnym.
Podwójne escapowanie w zagnieżdżonych kontekstach
Gdy tekst przechodzi kolejno przez dwa konteksty — np. ciąg jest wstawiany do JSON, a ten JSON jest przekazywany jako argument polecenia powłoki — escapowanie trzeba zastosować we właściwej kolejności: najpierw dla kontekstu wewnętrznego (JSON), potem dla zewnętrznego (shell). Odwrócona kolejność lub pominięty poziom to częsty powód, dla którego "poprawnie zescapowany" ciąg i tak psuje się w praktyce.