Niektóre znaki nie mogą być częścią adresu URL (np. spacja), a inne znaki mają specjalne znaczenie w adresie URL. W formularzach HTML znak =
służy do oddzielania nazwy od wartości. W rozwiązaniu tego problemu ogólna składnia identyfikatora URI wykorzystuje kodowanie adresów URL, a formularze HTML stosują dodatkowe zamienniki zamiast kodowania procentowego.
Na przykład spacje w ciągu znaków są zakodowane %20
lub zastąpione znakiem plusa (+
). Jeśli używasz separatora w pionie (|
), pamiętaj, aby zakodować potok jako %7C
. Przecinek w ciągu znaków powinien być zakodowany jako %2C
.
Zalecamy używanie standardowych bibliotek kompilacji adresu URL platformy do automatycznego kodowania adresów URL, aby upewnić się, że adresy URL są odpowiednio zmienione.
Tworzenie prawidłowego adresu URL
Może Ci się wydawać, że „prawidłowe” adresy URL są zrozumiałe, ale w rzeczywistości tak nie jest. Na przykład adres URL wpisany w pasku adresu w przeglądarce może zawierać znaki specjalne (np."上海+中國"
). Przeglądarka musi przed przesłaniem przesłać te znaki do innego kodowania.
Na podstawie tego samego tokena każdy kod, który generuje lub akceptuje dane wejściowe UTF-8, może traktować adresy URL ze znakami UTF-8 jako „prawidłowe”, ale musi też tłumaczyć te znaki, zanim zostaną wysłane na serwer WWW.
Taki proces nazywa się
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 ujednoliconego identyfikatora zasobu (URI). Oznacza to, że adresy URL mogą zawierać tylko specjalny podzbiór znaków ASCII: znane symbole 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:
Ustaw | znaków | Użycie adresu URL |
---|---|---|
Znaki alfanumeryczne | a b c d e k g g h i j k l m n o p k r s k t n k 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 9 6 7 7 | Ciągi tekstowe, wykorzystanie schematu (http ), port (8080 ) itd. |
Niezarezerwowane | – _ . ~ | Ciągi tekstowe |
Zarezerwowano | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | Kontrolowanie znaków i/lub ciągów tekstowych |
Podczas tworzenia prawidłowego adresu URL upewnij się, że zawiera on tylko te znaki podane w tabeli Podsumowanie prawidłowych znaków adresu URL. Użycie adresu URL w taki sposób, by używało tego zestawu znaków, prowadzi zwykle do 2 problemów: jednego pominięcia i jednego zamiennika:
- Znaki, które chcesz obsługiwać, nie są wymienione powyżej. Na przykład znaki w obcych językach, takie jak
上海+中國
, muszą być kodowane przy użyciu powyższych znaków. Zgodnie z obowiązującą konwencją spacje (niedozwolone w adresach URL) są często przedstawiane za pomocą znaku plusa'+'
. - Znaki w tych powyższych zestawach są zastrzeżone, ale należy ich używać dosłownie.
Na przykład w adresach URL jest używany znak
?
wskazujący początek ciągu zapytania. Jeśli chcesz użyć ciągu „? i tajemnicy”, musisz zakodować znak'?'
.
Wszystkie znaki zakodowane przy użyciu adresu URL są kodowane za pomocą znaku '%'
i dwuznakowej wartości szesnastkowej odpowiadającej jej znakowi UTF-8. Na przykład 上海+中國
w kodowaniu UTF-8 będzie zakodowany jako URL w formacie %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
.
Popularne znaki wymagające kodowania
Kilka typowych znaków, które należy zakodować:
Niebezpieczny znak | Zakodowana wartość |
---|---|
Spacja | %20 |
” | %22 |
< | %3C |
> | %3E |
# | %23 |
% | %25 |
| | %7C |
Konwersja adresu URL otrzymanego od użytkownika jest czasami skomplikowana. Na przykład użytkownik może wpisać adres jako „ul. Główna 5” Ogólnie należy tworzyć adres URL z jego części, traktując dane użytkowników jako dosłowne znaki.
Dodatkowo dla wszystkich usług internetowych Google Maps Platform i statycznych interfejsów API URL-e mogą mieć maksymalnie 8192 znaki. W przypadku większości usług limit znaków rzadko jest osiągany. Pamiętaj jednak, że niektóre usługi mają kilka parametrów, które mogą powodować długie adresy URL.