Відсоткове кодуванняВідсоткове кодування (англ. Percent-encoding, також відоме як URL-кодування) — механізм для кодування інформації в уніфікованому ідентифікаторі ресурсів (URI), який використовується для кодування певних символів у вигляді Відсоткове кодування в URIТипи символів в URIСимволи, які може містити в собі URI, поділяються на зарезервовані та незарезервовані. Зарезервованими символами є ті, які іноді мають спеціальне значення. Наприклад, обернена коса риска використовується для розділення різних частин URL. Незарезервовані символи не мають таких спеціальних значень і завжди позначають тільки самі себе. При використанні відсоткового кодування зарезервовані символи закодовуються у вигляді спеціальних послідовностей символів. Списки зарезервованих та незарезервованих символів, а також обставини, за яких зарезервовані символи набувають спеціального значення, потрошку змінюються з кожною новою версією специфікацій, що стосуються URI та URL.
! * ' ( ) ; : @ & = + $ , / ? # [ ]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 - _ . ~ Всі інші символи в URI мають закодовуватись за допомогою відсоткового кодування. Відсоткове кодування зарезервованих символівКоли певний символ має спеціальне значення у використовуваній схемі URI, але треба вставити сам цей символ, а не його спеціальне значення, то до цього символу слід застосувати відсоткове кодування. Це передбачає переведення символа у відповідне йому байтове значення в ASCII, і запис цього значення в шістнадцятковій системі числення двома цифрами після знаку Наприклад, зарезервований символ
Зарезервовані символи, які не мають спеціального значення у даному випадку, теж можуть бути закодовані за допомогою відсоткового кодування, але також можуть використовуватись самі по собі. В компоненті URI, який називається «query» (запит), і який починається після символу Уніфіковані ідентифікатори ресурсів, які відрізняються лише тим чи зарезервований символ закодований відсотковим кодуванням чи ні, зазвичай вважаються нееквівалентними, хоча і можуть вказувати на той самий ресурс. Якщо в схемі URI зарезервований символ вказується як такий, що не має спеціального значення, то тоді уніфіковані ідентифікатори ресурсів з цим символом закодованим і незакодованим вважаються еквівалентними. Відсоткове кодування незарезервованих символівНе існує потреби в закодовуванні незарезервованих символів. Попри це, все ж існує можливість закодовування незарезервованих символів, хоча це не рекомендується. Уніфіковані ідентифікатори ресурсів, які відрізняються лише тим чи незарезервований символ закодований відсотковим кодуванням чи ні, вважаються еквівалентними за визначенням. Але на практиці, деякі обробники URI можуть не визнавати цієї еквівалентності. В теорії, обробники URI повинні ставитися до Відсоткове кодування символа відсоткаОскільки знак відсотка використовується як показник початку закодованого символа, то для включення до URI самого знаку відсотка потрібно використовувати послідовність Відсоткове кодування інших данихБільшість схем URI включають в себе представлення інших даних, таких як IP-адреси або адреси у файлових системах, як компоненти URI. Специфікації схем URI мали би задавати, але на практиці не задають, однозначну відповідність між символами URI та всіма можливими значеннями даних які би представлялись цими символами. Із запровадженням стандарту RFC 1738 в 1994 році, було визначено, що схеми які забезпечують представлення двійкових даних в URI повинні розділяти дані на байти і закодовувати кожен з них за допомогою відсоткового кодування. Таким чином, наприклад, байтове значення Процедура відсоткового кодування бінарних даних часто використовувалась, іноді некоректно або без належного опису, для кодування символьних даних. Під час ранніх років існування всесвітнього павутиння, коли символам завжди відповідав їх ASCII-код, така практика не створювала багато проблем. Тоді просто вважалось що символи та байти прив'язані одне до одного і можна перетворювати одне на інше. Однак, швидко зростала необхідність представлення символів не з ASCII, і схеми та протоколи URI часто не мали стандартизованих правил для підготовки символьних даних до включення в URI. Внаслідок цього вебдодатки почали застосовувати різні багатобайтові, станові та інші кодування що могли працювати з не-ASCII символами як основу для відсоткового кодування, що призвело до складнощів та двузначностей в інтерпритації деяких URI. Зокрема, схеми та протоколи URI, які базуються на стандартах RFC 1738 та RFC 2396, передбачають що символьні дані мають бути переведені в байти відповідно до якогось алгоритму кодування, перед тим як бути включеними до URI у вигляді незарезервованих символів або відсоткових послідовностей. Якщо схема не дозволяє URI вказати яке саме кодування було застосоване або якщо кодування конфліктує з відсотковим кодуванням ASCII-символів, то URI не може бути надійно інтерпретоване. Деякі схеми взагалі не застосовують кодування, замість цього вважаючи що символи даних прямо відповідають символам URI, і цим покладають відсоткове кодування ASCII-символів на конкретні імплементації схеми.
Відсоткове кодування літер української абеткиКириличні символи, зокрема і літери української абетки, не належать до ASCII, тому мають закодовуватись відсотковим кодуванням перед тим як бути включеними до URI. Наприклад, хоч переважна більшість сучасних браузерів і показує кириличні символи замість відсоткових послідовностей в адресному рядку, технічно, справжньою URL-адресою цієї статті є Коди для українських літер йдуть поспіль (код наступної літери = код попередньої + 1), окрім літер «ґ», «є», «і» та «ї», коди яких не вписуються в послідовність, а також окрім декількох проміжків, де наступний код є збільшенням попереднього більше ніж на 1. Це все тому, що в UTF-8 спочатку задаються літери російської абетки (крім «ё»), а лише потім літери інших кириличних абеток (зокрема і української), які не входять до російської абетки. Тому для літер російської абетки, на відміну від української, всі коди (крім «ё») йдуть поспіль.
Тип application/x-www-form-urlencodedКоли відправляються дані, що були введені до HTML-форми, назви і значення змінних форми закодовуються і відсилаються до сервера у вигляді HTTP-запита через метод POST або через метод GET, або, історично, через електронний лист. Кодування що використовується за замовчуванням засноване на ранній версії основних правил відсоткового кодування URI, які були декілька разів доповнені, наприклад нормалізацією символе нового рядка або кодуванням пробілу як Коли дані з HTML-форми відсилаються GET-запитом, вони включаються в компонент «query» в URI використовуючи синтаксис, який описаний вище. Коли дані відсилаються методом POST або електронним листом, вони включаються в тіло повідомлення і до заголовку «Content-Type» записується Див. також
Посилання
|