Kodowanie URL-i

Niektóre znaki nie mogą być częścią adresu URL (np. spacja), a inne mają w nim specjalne znaczenie. W formularzach HTML znak = służy do oddzielania nazwy od wartości. Aby rozwiązać ten problem, ogólna składnia identyfikatora URI używa kodowania adresu URL, natomiast formularze HTML dokonują dodatkowych podstawień, zamiast stosować kodowanie procentowe dla wszystkich takich znaków.

Na przykład spacje w ciągu znaków są kodowane jako %20 lub zastępowane znakiem plusa (+). Jeśli jako separatora używasz kreski pionowej (|), pamiętaj, aby zakodować ją jako %7C. Przecinek w ciągu znaków powinien być zakodowany jako %2C.

Zalecamy używanie standardowych bibliotek do tworzenia adresów URL na Twojej platformie, aby automatycznie kodować adresy URL i zapewnić ich prawidłowe uciekanie.

Tworzenie prawidłowego adresu URL

Może się wydawać, że „prawidłowy” URL jest oczywisty, ale nie zawsze tak jest. Adres URL wpisany na przykład na pasku adresu w przeglądarce może zawierać znaki specjalne (np."上海+中國"). Przeglądarka musi wewnętrznie przetłumaczyć te znaki na inne kodowanie przed ich przesłaniem. Z tego samego powodu każdy kod, który generuje lub akceptuje dane wejściowe w formacie UTF-8, może traktować adresy URL ze znakami UTF-8 jako „prawidłowe”, ale musi też przetłumaczyć te znaki przed wysłaniem ich do serwera WWW. Ten proces nazywa się kodowaniem adresów URL lub kodowaniem procentowym.

Znaki specjalne

Znaki specjalne trzeba przekształcić, ponieważ wszystkie adresy URL muszą być zgodne ze składnią określoną w specyfikacji Uniform Resource Identifier (URI). W efekcie adresy URL mogą zawierać tylko specjalny podzbiór znaków ASCII: znane symbole alfanumeryczne i niektóre znaki zarezerwowane do użycia jako znaki sterujące w adresach URL. Te znaki są podsumowane w tabeli:

Podsumowanie prawidłowych znaków w adresie URL
UstawznakówZastosowanie adresu URL
Znaki alfanumeryczne 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 ciągi tekstowe, użycie schematu (http), port (8080) itp.
Niezarezerwowane - _ . ~ ciągi tekstowe,
Zarezerwowane ! * ' ( ) ; : @ & = + $ , / ? % # [ ] znaki kontrolne lub ciągi tekstowe,

Podczas tworzenia prawidłowego adresu URL musisz upewnić się, że zawiera on tylko znaki podane w tabeli. Dostosowanie adresu URL do tego zestawu znaków zwykle prowadzi do 2 problemów – pominięcia i zastąpienia:

  • Znaki, które chcesz obsłużyć, znajdują się poza powyższym zestawem. Na przykład znaki w językach obcych, takie jak 上海+中國, muszą być zakodowane za pomocą powyższych znaków. Zgodnie z powszechną konwencją spacje (które nie są dozwolone w adresach URL) są często reprezentowane przez znak plusa '+'.
  • Znaki istnieją w powyższym zbiorze jako znaki zarezerwowane, ale muszą być używane dosłownie. Na przykład ? jest używany w adresach URL do oznaczania początku ciągu zapytania. Jeśli chcesz użyć ciągu „? i tajemnice”, musisz zakodować znak '?'.

Wszystkie znaki, które mają być zakodowane na potrzeby adresu URL, są kodowane za pomocą znaku '%' i dwuznakowej wartości szesnastkowej odpowiadającej ich znakowi UTF-8. Na przykład 上海+中國 w kodowaniu UTF-8 będzie zakodowany w adresie URL jako %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. Ciąg znaków ? and the Mysterians zostanie zakodowany w adresie URL jako %3F+and+the+Mysterians lub %3F%20and%20the%20Mysterians.

Typowe znaki, które wymagają kodowania

Oto kilka typowych znaków, które muszą być zakodowane:

Niebezpieczny znak Zakodowana wartość
Spacja %20
”. %22
< %3C
> %3E
# %23
% %25
| %7C

Konwertowanie adresu URL otrzymanego od użytkownika bywa trudne. Użytkownik może na przykład wpisać adres „5th&Main St.”. Zasadniczo adres URL należy tworzyć z jego części, traktując wszelkie dane wejściowe użytkownika jako znaki dosłowne.

Dodatkowo adresy URL są ograniczone do 16 384 znaków we wszystkich usługach internetowych i statycznych interfejsach API Google Maps Platform. W przypadku większości usług ten limit znaków rzadko zostanie osiągnięty. Pamiętaj jednak, że niektóre usługi mają kilka parametrów, co może skutkować długimi adresami URL.