Kodowanie adresów URL

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Niektóre znaki nie mogą być częścią adresów URL (np. spacja), a inne mają specjalne znaczenie w adresie URL. W formularzach HTML znak = służy do oddzielenia nazwy od wartości. Aby rozwiązać ten problem, ogólna składnia identyfikatora URI wykorzystuje kodowanie adresów URL, a formularze HTML stanowią dodatkowe zamienniki, zamiast stosować kodowanie procentowe dla wszystkich takich znaków.

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

Zalecamy używanie normalnych bibliotek do tworzenia adresów URL z platformy do automatycznego kodowania adresów URL, aby mieć pewność, że są one odpowiednio zmienione.

Tworzenie prawidłowego adresu URL

Może Ci się wydawać, że „prawidłowe” adresy URL są oczywiste, ale to nieprawda. Adres URL wpisany w pasku adresu w przeglądarce może np. zawierać znaki specjalne (np. "上海+中國"). Przeglądarka musi przesłać te znaki wewnętrznie do innego kodowania przed rozpoczęciem transmisji. Na podstawie tego samego tokena każdy kod, który generuje lub akceptuje dane UTF-8, może traktować adresy URL ze znakami UTF-8 jako „prawidłowe”, ale przed wysłaniem ich na serwer WWW musi też przetłumaczyć te znaki. Ten proces jest nazywany kodowaniem adresów URL lub kodowaniem procentowym.

Znaki specjalne

Musimy przetłumaczyć znaki specjalne, ponieważ wszystkie adresy URL muszą być zgodne ze składnią określoną w specyfikacji ujednoliconych identyfikatorów zasobów (URI). Oznacza to, że adresy URL mogą zawierać tylko specjalny podzbiór znaków ASCII: znane znaki alfanumeryczne oraz niektóre zarezerwowane znaki, które mogą być używane jako znaki kontrolne w adresach URL. Ta tabela zawiera podsumowanie tych znaków:

Podsumowanie prawidłowych znaków adresu URL
UstawznakuUżycie adresu URL
Znaki alfanumeryczne a b c d e f g h i j k l l m n o p y Ciągi tekstowe, wykorzystanie schematu (http), port (8080) itd.
Niezarezerwowane – _ . ~ Ciągi tekstowe
Zarezerwowano ! * ' ( ) ; : @ & = + $ , / ? % # [ ] Steruj znakami lub ciągami tekstowymi

Podczas tworzenia prawidłowego adresu URL upewnij się, że zawiera on tylko znaki widoczne w tabeli Podsumowanie prawidłowych znaków. Podanie adresu URL do użycia z tym zestawem znaków zwykle powoduje 2 problemy: omyłkowe i zastąpienie:

  • Znaki, którymi chcesz się zająć, nie są wymienione powyżej. Na przykład znaki w językach obcych, takie jak 上海+中國, muszą być zakodowane przy użyciu powyższych znaków. Zgodnie z obowiązującą konwencją spacje (niedozwolone w adresach URL) są często reprezentowane przy użyciu znaku plusa '+'.
  • Znaki w powyższym ustawieniu są ustawione jako znaki zarezerwowane, ale należy ich używać dosłownie. Na przykład element ? jest używany w adresach URL do oznaczania początku ciągu zapytania. Jeśli chcesz użyć ciągu „? i tajników”, musisz zakodować znak '?'.

Wszystkie znaki do zakodowania muszą być zakodowane przy użyciu znaku '%' i 2-znakowych wartości szesnastkowych odpowiadających ich kodowaniu UTF-8. Na przykład kod 上海+中國 w UTF-8 jest zakodowany jako %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. Ciąg ? and the Mysterians zostanie zakodowany jako %3F+and+the+Mysterians lub %3F%20and%20the%20Mysterians.

Typowe znaki wymagające kodowania

Typowe znaki, które muszą być zakodowane:

Niebezpieczny znak Zakodowana wartość
Spacja %20
" %22
< %3C
> %3E
Nr %23
% %25
| %7C

Konwersja adresu URL otrzymanego z danych wejściowych użytkownika może być dość skomplikowana. Na przykład użytkownik może wprowadzić adres jako „ul. Główna i ul. Główna”. Ogólnie rzecz biorąc, adres URL należy tworzyć z części, traktując użytkowników jako dane dosłowne.

Dodatkowo we wszystkich usługach internetowych Google Maps Platform i w statycznych interfejsach API adresy URL mogą mieć maksymalnie 8192 znaki. W przypadku większości usług limit znaków niemal nigdy się nie zbliża. Pamiętaj jednak, że niektóre usługi mają kilka parametrów, które mogą prowadzić do długich adresów URL.