Опция «экранировать не-ASCII как \uXXXX» особенно полезна для кириллицы: она превращает «Привет» в Привет — последовательность, состоящую только из ASCII-символов. Исторически это было не просто удобством, а обходом реальной проблемы: старые системы и неправильно настроенные каналы передачи данных нередко ожидали кодировку Windows-1251 вместо UTF-8, и кириллица, вставленная «как есть», превращалась в нечитаемую кашу (мойбаке). Экранирование в \uXXXX полностью убирает зависимость от того, в какой кодировке текст будет прочитан на другом конце.
Экранирование в строке JavaScript/JSON
В строковых литералах JS и в JSON спецсимволы экранируют обратным слешем: \" для кавычки, \n для переноса строки, \\ для самого обратного слеша. JSON дополнительно требует, чтобы все строки были в двойных кавычках — в отличие от JS, где допустимы и одинарные.
Экранирование в shell-командах
В командной строке спецсимволами являются пробел, кавычки, знак доллара, звёздочка и другие — они имеют особое значение для оболочки (shell). Пробел в аргументе команды нужно экранировать или взять весь аргумент в кавычки, иначе оболочка разделит его на два отдельных аргумента.
Экранирование в регулярных выражениях
В регулярных выражениях символы вроде точки, звёздочки или круглых скобок имеют специальное значение (любой символ, квантификатор, группа). Чтобы найти их буквально, а не как метасимволы, перед ними ставят обратный слеш: \. находит точку, а не «любой символ».
Зачем нужно отдельное экранирование для каждого контекста
Ошибка «двойного экранирования» или «недостаточного экранирования» — одна из самых частых причин сломанного кода при вставке текста пользователя (например, пути к файлу с пробелом) в команду или строку. Правильное экранирование зависит от того, куда именно вставляется текст, а не от самого текста.
Зачем это нужно
- Подготовить текст пользователя, включая кириллицу, для безопасной вставки в JSON-запрос.
- Сформировать shell-команду с динамическим аргументом без риска инъекции команд.
- Экранировать спецсимволы перед использованием текста как буквального паттерна в регулярном выражении.
Двойное экранирование во вложенных контекстах
Если текст проходит через два контекста последовательно — например, строка вставляется в JSON, а этот JSON передаётся как аргумент shell-команды — экранировать нужно в правильном порядке: сначала для внутреннего контекста (JSON), затем для внешнего (shell). Перепутанный порядок или пропущенный один из уровней — типичная причина, почему «правильно экранированная» строка всё равно ломается на практике.