Utilia

Екранування й деекранування рядків

Екрануйте або деекрануйте рядок для JSON, JavaScript, шаблонних літералів, SQL, CSV, атрибутів HTML, регулярних виразів і URL просто у браузері.

Як екранувати чи деекранувати рядок

  1. Виберіть ціль у полі Формат: рядок JSON, рядок JavaScript, шаблонний літерал JavaScript, рядковий літерал SQL, поле CSV, значення атрибута HTML, регулярний вираз або компонент URL.
  2. Введіть або вставте текст у поле вводу.
  3. Натисніть Екранувати, щоб перетворити звичайний текст на безпечний літерал, або Деекранувати, щоб повернути літерал до звичайного тексту. Результат оновлюється під час введення в напрямку, який ви вибрали останнім.
  4. Налаштуйте параметри, показані для формату: Додати лапки навколо, Екранувати символи не з ASCII або Пробіли як + (дані форми).
  5. Натисніть Копіювати або Результат як вхідні дані, щоб змінити операцію на зворотну й перевірити круговий цикл.

Кількість символів до й після показано під кнопками. Усе виконується у вашому браузері; нічого не завантажується на сервер.

Що робить кожен формат

  • Рядок JSON: екранує ", \ і керівні символи (\n, \t, \u0000…), точно як JSON.stringify. З параметром Екранувати символи не з ASCII кожен символ вище за U+007E стає \uXXXX (емодзі стають сурогатною парою на кшталт 😀). Деекранування приймає текст із подвійними лапками й без них і терпимо ставиться до «сирих» розривів рядків.
  • Рядок JavaScript (‘…’): екранує зворотний скісний, одинарну лапку, розриви рядків і керівні символи, а також U+2028 та U+2029, які ламають старіші рушії. Деекранування розуміє \x41, A, \u{1F600}, застарілі вісімкові екранування на кшталт \101 і продовження рядків.
  • Шаблонний літерал JavaScript (`…`): екранує зворотні лапки, зворотні скісні й ${, щоб жоден вираз не обчислювався; розриви рядків і табуляції лишаються як є, бо шаблонні літерали це дозволяють.
  • Рядковий літерал SQL (‘…’): подвоює одинарні лапки (O'Brien → 'O''Brien'), як у стандартному SQL. Деекранування відхиляє лапку, яку не подвоєно. Зворотні скісні не чіпаються: MySQL у режимі за замовчуванням також трактує \ як символ екранування, тому перевірте правила своєї бази даних.
  • Поле CSV (RFC 4180): бере поле в подвійні лапки й подвоює внутрішні лапки, якщо воно містить кому, крапку з комою, табуляцію, лапку, розрив рядка або пробіл на початку чи в кінці. Додати лапки навколо примусово ставить лапки.
  • Значення атрибута HTML: замінює &, <, >, " і ' на сутності, що безпечно як в одинарних, так і в подвійних лапках атрибутів. Деекранування декодує числові посилання та &amp;, &lt;, &gt;, &quot;, &apos; і &nbsp;.
  • Регулярний вираз (літеральний текст): екранує зворотним скісним . * + ? ^ $ { } ( ) | [ ] \ /, а також розриви рядків і табуляції, щоб шаблон збігався з текстом буквально. Результат коректний як із прапорцем u, так і без нього.
  • Компонент URL (відсоткове кодування): працює як encodeURIComponent, кодуючи все, крім літер, цифр і - _ . ! ~ * ' ( ), байтами UTF-8. Пробіли як + (дані форми) застосовує угоду application/x-www-form-urlencoded.

Екранування – не межа безпеки для SQL

Коли ви вибираєте SQL, інструмент показує нагадування, і його варто повторити: справжній захист від SQL-ін’єкцій – це параметризований запит (підготовлений оператор), у якому значення надсилається окремо від тексту SQL. Екранування вручну крихке: воно залежить від бази даних, кодування з’єднання та налаштувань, як-от обробка зворотних скісних у MySQL. Використовуйте цей результат, щоб читати журнали, писати тестові дані чи налагоджувати запит, але ніколи не будуйте запити з введених користувачем даних.

Для CSV інструмент також попереджає, коли значення починається з =, +, - чи @: електронна таблиця може виконати його як формулу (CSV-ін’єкція). Лапки цьому не запобігають; звичайне пом’якшення – додати перед значенням апостроф або пробіл.

Поширені запитання

Чим рядок JSON відрізняється від рядка JavaScript?

JSON дозволяє лише подвійні лапки та невеликий набір екранувань (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript приймає також одинарні лапки, зворотні лапки, \x41, \u{…}, \v і \0. Коректні екранування JSON коректні й у JavaScript, але не навпаки.

Чому деекранування завершується помилкою «недійсна escape-послідовність»?

Текст містить зворотний скісний, за яким іде щось недозволене для цього формату, наприклад \u12 із менш ніж чотирма шістнадцятковими цифрами або одинокий зворотний скісний наприкінці. Повідомлення про помилку показує проблемну послідовність.

Чи потрібні лапки навколо кожного поля CSV?

Ні. RFC 4180 вимагає лапок лише тоді, коли поле містить кому, подвійну лапку чи розрив рядка. Цей інструмент також бере в лапки крапки з комою, табуляції та пробіли на початку чи в кінці, бо багато електронних таблиць використовують їх як роздільники або обрізають.

Чи достатньо екранування атрибута HTML для захисту від XSS?

Воно правильне для тексту всередині значення атрибута в лапках. Його недостатньо для атрибутів, які самі є кодом чи URL, як-от onclick або href="javascript:…"; їх треба перевіряти, а не лише екранувати.

Чи надсилається мій текст на сервер?

Ні. Усі перетворення виконуються локально у вашому браузері, тож можна безпечно вставляти значення конфігурації чи дані, якими ви не ділилися б.