Dotyczy to nie tylko ampersand w adresach URL, ale wszystkich znaków zastrzeżonych . Niektóre z nich obejmują:
# $ & + , / : ; = ? @ [ ]
Pomysł jest taki sam jak kodowanie &
w dokumencie HTML, ale kontekst został zmieniony tak, aby zawierał się w URI, oprócz bycia w dokumencie HTML. Tak więc kodowanie procentowe zapobiega problemom z analizą składni w obu kontekstach.
Przydaje się to bardzo często, gdy trzeba umieścić adres URL w innym adresie URL. Na przykład, jeśli chcesz opublikować status na Twitterze:
http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)
W moim tweecie jest wiele zarezerwowanych znaków, a ?'():/
więc zakodowałem całą wartość status
parametru URL. Jest to również pomocne, gdy używasz mailto:
linków zawierających treść lub temat wiadomości, ponieważ musisz zakodować parametry body
i subject
, aby zachować nienaruszone podziały wierszy, znaki ampersand itp.
Gdy znak z zestawu zastrzeżonego („znak zastrzeżony”) ma specjalne znaczenie („zarezerwowany cel”) w pewnym kontekście, a schemat URI mówi, że konieczne jest użycie tego znaku w innym celu, wówczas znak musi być zakodowany procentowo. Kodowanie procentowe znaku zarezerwowanego obejmuje konwersję znaku na odpowiadającą mu wartość bajtu w ASCII, a następnie reprezentowanie tej wartości jako pary cyfr szesnastkowych. Cyfry poprzedzone znakiem procentu („%”), który jest używany jako znak zmiany znaczenia, są następnie używane w URI zamiast znaku zarezerwowanego. (W przypadku znaku spoza ASCII jest on zazwyczaj konwertowany na sekwencję bajtów w UTF-8, a następnie każda wartość bajtu jest reprezentowana jak powyżej.) Znak zastrzeżony „/”, na przykład, jeśli jest używany w „ścieżce” składnik identyfikatora URI ma specjalne znaczenie jako ogranicznik między segmentami ścieżki. Jeśli zgodnie z danym schematem URI „/” musi znajdować się w segmencie ścieżki, wówczas w segmencie należy użyć trzech znaków „% 2F” lub „% 2f” zamiast surowego „/”.
http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters