Экранирование строк
Одна строка, шесть экранирований: JSON, HTML, URL, Base64, SQL и regex — в обе стороны везде, где обратное честно существует. Экранирование regex откровенно одностороннее, а битый вход возвращается ясным отказом, а не искорёженным текстом.
Шесть языков, одно столкновение
Каждое экранирование существует потому, что текст постоянно попадает внутрь другого текста: кавычка в JSON-строке, < в HTML, апостроф в SQL-литерале. У языка-хозяина есть разделители; в ваших данных они могут встретиться; экранирование — договор, разводящий их по углам.
Договоры различаются обратимостью. JSON, HTML, URL, Base64 и SQL определяют точные инверсии — страница реализует обе стороны со строгой проверкой: Base64 с недопустимым UTF-8 внутри вернёт отказ, а не кракозябры. Regex определяет только броню — потому в его вкладке одно направление и примечание вместо притворства.
Частые вопросы
Где какое экранирование нужно?
JSON — строковым значениям в API и конфигах; HTML — тексту внутри разметки (пять специальных: & < > " '); URL — значениям query-string; Base64 — байтам в текстовых каналах; удвоенная кавычка SQL — строковым литералам; regex — когда поисковый запрос пользователя должен совпасть с собой буквально внутри паттерна.
Почему Base64 раздувает текст на треть?
Он отображает каждые 3 байта в 4 символа 64-символьного алфавита — выход в 4/3 раза больше до паддинга. Это не сжатие и не шифрование, а броня, переживающая каналы, которые исковеркали бы сырые байты. Кириллица дороже: UTF-8 сначала тратит на такую букву 2 байта.
Почему экранирование regex одностороннее?
Потому что его не развернуть, не зная намерения: в a\.b бэкслеш может быть бронёй этого инструмента или буквальным бэкслешем, который уже был в паттерне. У всех прочих режимов здесь есть спецификация с ответом на этот вопрос; у regex — нет, и инструмент отказывается гадать.
Хватит ли экранирования против SQL-инъекций и XSS?
Это механизм, но не стратегия. Для SQL параметризованные запросы всегда лучше литералов с ручным экранированием — пользуйтесь этим, когда литерал строить действительно надо. Для HTML экранирование на выводе — ровно то, что делают шаблонизаторы; вручную оно нужно там, где их нет.
Похожие инструменты
- Конструктор схем и блок-схемРисуйте блок-схемы и диаграммы, соединяйте блоки стрелками, которые прокладывают себя сами, и раскладывайте всё автоматически. Экспорт в SVG.
- Генератор паролейСоздавайте надёжные пароли криптографическим генератором браузера с оценкой стойкости.
- HTML-сущностиКодируйте текст для HTML или декодируйте сущности обратно — ломающие разметку знаки, именованные наборы, числовые ссылки до эмодзи. Ровно один проход.