Це стосується не лише амперсанда в URL-адресах, але і всіх зарезервованих символів . Деякі з яких включають:
# $ & + , / : ; = ? @ [ ]
Ідея така ж, як кодування &
в HTML-документі, але контекст змінився таким, що він знаходиться в межах URI, на додаток до документа HTML. Отже, відсоткове кодування запобігає проблемам з розбором усередині обох контекстів.
Місце, де це дуже корисно, - це коли потрібно вставити URL-адресу в іншу URL-адресу. Наприклад, якщо ви хочете опублікувати статус у Twitter:
http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)
У моєму твіті є багато зарезервованих символів, а саме ?'():/
тому я кодував усе значення status
параметра URL. Це також корисно при використанні mailto:
посилань, що містять тіло або предмет повідомлення, тому що вам потрібно кодувати body
та subject
параметри, щоб зберегти розриви рядків, розсилки тощо тощо.
Коли символ із зарезервованого набору ("зарезервований символ") має спеціальне значення ("зарезервована мета") у певному контексті, а схема URI говорить про те, що потрібно використовувати цей символ для якоїсь іншої мети, тоді символ повинні бути кодовані у відсотках. Процентне кодування зарезервованого символу передбачає перетворення символу у відповідне значення байта в ASCII, а потім подання цього значення у вигляді пари шістнадцяткових цифр. Цифри, що передують знаку відсотка ("%"), який використовується як символ евакуації, потім використовуються в URI замість зарезервованого символу. (Для символу, який не є ASCII, він зазвичай перетворюється на його послідовність байтів у UTF-8, і тоді кожне байтне значення подається як вище.) Зарезервований символ "/", наприклад, якщо він використовується у "шляху" компонент URI, має особливе значення бути роздільником між сегментами шляху. Якщо відповідно до заданої схеми URI, "/" має бути в сегменті шляху, тоді три символи "% 2F" або "% 2f" повинні бути використані в сегменті замість необробленого "/".
http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters