·4 мин. чтения

Экранирование и снятие экранирования строк для Mac — JSON, HTML, URL

Встраивание одного строкового формата в другой означает правильное экранирование кавычек, слэшей и специальных символов — иначе ваш парсер подавится.

Вам нужно встроить строку JSON внутрь другой строки JSON — может быть, сообщение лога, само содержащее payload JSON. Или вы пишете команду shell, включающую строку с кавычками внутри. Или строите URL, который должен нести другой URL как параметр запроса. Каждая из этих ситуаций требует экранирования: превращения символов, которые иначе интерпретировались бы как синтаксис, в форму, которая воспринимается как буквальные данные.

Разные контексты экранируют по-разному. JSON экранирует кавычки обратным слэшем и представляет специальные символы вроде переноса строки как \n. Экранирование в shell зависит от того, какой стиль кавычек вы используете. Экранирование URL кодирует зарезервированные символы процентами совершенно иначе, чем оба остальных. Перепутав их — применив экранирование JSON там, где нужно было экранирование URL, — вы получите вывод, который выглядит почти правильно и ломается запутанным образом.

Проблема двойного экранирования

Один из самых частых багов в этой области — двойное экранирование: строка экранируется один раз вашим кодом и ещё раз библиотекой или фреймворком, который считает, что она всё ещё сырая, превращая один обратный слэш в два и незаметно повреждая данные. Диагностика этого требует снятия экранирования слой за слоем, чтобы увидеть точно, где был добавлен лишний уровень — утомительно делать вручную, особенно для длинной строки.

Экранируйте и снимайте экранирование для разных форматов

Bellows включает инструменты экранирования строк для форматов JSON, HTML и URL среди своих 41 инструментов для разработчиков. Вставьте сырую строку, чтобы увидеть её правильно экранированной для нужного контекста, или вставьте экранированную строку, чтобы увидеть исходное сырое значение.

Bellows string escape and unescape tool on macOS

Встраивание строк внутрь строк

Построение payload JSON, который сам содержит строку JSON в качестве значения поля, или составление сообщения лога, которому нужно безопасно включить произвольный пользовательский ввод, — обе задачи требуют корректного экранирования, чтобы не повредить внешнюю структуру.

Диагностика дважды экранированных данных

Когда строка выглядит так, будто её экранировали больше раз, чем нужно, снятие экранирования слой за слоем показывает точно, где было добавлено лишнее кодирование, что обычно самый быстрый способ найти ответственный за это код.

Получить Bellows в Mac App Store

Следующая статья

Bellows

41 developer tools in one native Mac app — JSON, JWT, Base64, hashes, and more.

Get Bellows on the Mac App Store