Як працює URL-кодування
В адресах сайтів дозволено лише кілька символів: латинські літери, цифри та кілька знаків. Усе інше кодується. В UTF-8 літера ї складається з байтів D1 і 97, тому виходить %D1%97. Пробіл перетворюється на %20, а у формах – на +.
Закодовано
%D0%91%D0%BE%D1%80%D1%89 %D1%83 %D0%9A%D0%B8%D1%94%D0%B2%D1%96
Розкодовано
Борщ у Києві
Найчастіші URL-коди
%D1%97= ї,%D0%87= Ї,%D1%94= є,%D0%84= Є%D1%96= і,%D0%86= І,%D2%91= ґ,%D2%90= Ґ%E2%82%AC= €,%E2%80%99= ’,%E2%80%93= –%20= пробіл,%2F= /,%3F= ?,%26= &,%25= %
Український текст легко впізнати за початком кодів: майже кожна кирилична літера – це два байти, %D0… або %D1…, а ґ починається з %D2. Тож %D0%94%D1%96%D0%BC читається як Дім. Старі системи кодують кожну літеру одним байтом з Windows-1251: %CA%E8%BF%E2 замість %D0%9A%D0%B8%D1%97%D0%B2. Mojibuster розпізнає й це і робить із нього Київ.
Звідки береться текст із кодами
- Скопійовані посилання: браузер показує
uk.wikipedia.org/wiki/Київ, але в буфер обміну часто потрапляє%D0%9A%D0%B8%D1%97%D0%B2. - Форми та мітки: пошукові запити й UTM-мітки зберігаються в логах серверів і вивантаженнях аналітики закодованими, наприклад
?q=%D0%B1%D0%BE%D1%80%D1%89. - Вивантаження та API: деякі сервіси розсилок, вебхуки й API зберігають значення закодованими; тоді в CSV-файлі замість імен стоять коди.
- Імена файлів: завантажений файл називається
%D0%A0%D0%B0%D1%85%D1%83%D0%BD%D0%BE%D0%BA.pdf, якщо сервер не розкодував ім’я.
Коди й кракозябри водночас
Іноді текст зіпсовано двічі: %D0%A1%E2%80%94 – це закодовані кракозябри С—, тобто ї, яку спершу прочитали неправильно, а потім закодували. Mojibuster спершу розкодує коди, а потім виправить кодування Windows-1251. Зрештою знову буде ї.
Опція Також перетворити коди на цій сторінці вже ввімкнена. Вона перетворює й HTML-коди (ї), коди з листів (=D1=97) та екрановані послідовності з програм (\u0457). Інші помилки з літерами: що таке кракозябри.
Розкодувати самому: Excel, JavaScript, Python і PHP
- Excel: має лише функцію кодування (
ENCODEURLв англійській версії), функції розкодування немає. Найпростіше скопіювати стовпець, вставити сюди й повернути результат. Див. також кракозябри в Excel. - JavaScript:
decodeURIComponent('%D0%9A%D0%B8%D1%97%D0%B2')даєКиїв. - Python:
urllib.parse.unquote('%D0%9A%D0%B8%D1%97%D0%B2'), а для даних форм, де+означає пробіл,unquote_plus. - PHP:
rawurldecode()абоurldecode()для даних форм.
Часті запитання
Що означає %D1%97?
Це ї в URL-кодуванні: два байти UTF-8 D1 і 97, перед кожним стоїть %. Так само %D1%96 – це і, а %D1%94 – це є.
Що означає %20?
Пробіл. У даних форм замість нього часто стоїть +. Mojibuster залишає + як є: у звичайному тексті це може бути справжній плюс.
Мої посилання завантажуються на сервер?
Ні. Перетворення повністю виконується у вашому браузері. Посилання з токенами, адресами пошти й іншими особистими даними не залишають ваш пристрій.
Чому 100% не змінюється?
Mojibuster перетворює лише послідовності, з яких виходить справжній символ. 100%, 50 % або самотній %20 у звичайному тексті залишаються як є.