Im deutschsprachigen Raum wird CSV oft mit Semikolon statt Komma als Trennzeichen exportiert, weil das Komma als Dezimaltrennzeichen belegt ist. Ein Feld wie Müller; Schröder & Söhne mit Umlauten und einem eingebetteten Semikolon muss dafür in Anführungszeichen gesetzt werden: "Müller; Schröder & Söhne", und ein Anführungszeichen im Text selbst wird durch Verdopplung escaped (""). Das ist eine völlig andere Regel als das Backslash-Escaping in JS oder JSON.
Escaping in einem JavaScript-/JSON-String
In JS-String-Literalen und in JSON werden Sonderzeichen mit einem Backslash escaped: \" für ein Anführungszeichen, \n für einen Zeilenumbruch, \\ für den Backslash selbst. JSON verlangt zusätzlich, dass alle Strings in doppelten Anführungszeichen stehen — anders als JS, wo auch einfache erlaubt sind.
Escaping in Shell-Befehlen
Auf der Kommandozeile zählen Leerzeichen, Anführungszeichen, das Dollarzeichen, Sternchen und andere zu den Sonderzeichen — sie haben für die Shell eine besondere Bedeutung. Ein Leerzeichen innerhalb eines Arguments muss escaped oder das gesamte Argument in Anführungszeichen gesetzt werden, sonst zerlegt die Shell es in zwei separate Argumente.
Escaping in regulären Ausdrücken
In regulären Ausdrücken haben Zeichen wie Punkt, Sternchen oder Klammern eine besondere Bedeutung (ein beliebiges Zeichen, ein Quantifizierer, eine Gruppe). Um sie wörtlich statt als Metazeichen zu suchen, wird ein Backslash davorgesetzt: \. findet einen wörtlichen Punkt, nicht "ein beliebiges Zeichen".
Warum jeder Kontext sein eigenes Escaping braucht
Fehler durch "doppeltes Escaping" oder "unzureichendes Escaping" gehören zu den häufigsten Ursachen für kaputten Code, wenn Nutzertext (etwa ein Dateipfad mit Leerzeichen) in einen Befehl oder String eingefügt wird. Das richtige Escaping hängt davon ab, wo genau der Text eingefügt wird, nicht vom Text selbst.
Wofür man das braucht
- Nutzertext mit Umlauten und ß für die sichere Einbettung in eine JSON-Anfrage oder eine CSV-Datei mit Semikolon-Trennzeichen vorbereiten.
- Einen Shell-Befehl mit dynamischem Argument bauen, ohne Risiko einer Command-Injection.
- Sonderzeichen escapen, bevor der Text als wörtliches Muster in einem regulären Ausdruck verwendet wird.
Doppeltes Escaping in verschachtelten Kontexten
Durchläuft ein Text nacheinander zwei Kontexte — etwa wird ein String in JSON eingebettet, und dieses JSON wird dann als Argument eines Shell-Befehls übergeben —, muss das Escaping in der richtigen Reihenfolge erfolgen: zuerst für den inneren Kontext (JSON), dann für den äußeren (Shell). Eine vertauschte Reihenfolge oder eine übersprungene Ebene ist ein häufiger Grund, warum ein "korrekt escapter" String in der Praxis trotzdem kaputtgeht.