Kiedy spacja w adresie URL jest zakodowana +
, a kiedy jest zakodowana %20
?
url
url-encoding
PNE.
źródło
źródło
Odpowiedzi:
Z Wikipedii (wyróżnienie i link dodane):
Tak więc rzeczywiste kodowanie procentowe wykorzystuje,
%20
podczas gdy dane formularza w adresach URL są w zmodyfikowanej formie, która wykorzystuje+
. Więc najprawdopodobniej zobaczysz tylko+
w adresach URL w ciągu zapytania po?
.źródło
multipart/form-data
używa kodowania MIME;application/x-www-form-urlencoded
używa+
i odpowiednio koduje użycie identyfikatorów URI%20
.http://www.bing.com/search?q=hello+world
i zasób ze spacją w nazwiehttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:[email protected]?subject=I%20need%20help
. Jeśli próbowałeś tego za pomocą +, wiadomość e-mail otworzy się za pomocą + es zamiast spacji.To zamieszanie wynika z tego, że adresy URL są nadal „zepsute” do dziś.
Sprowadza się to do:
Powinieneś to zrobić
%20
przed?
i+
po.Źródło
źródło
key1=value1&key1=value2
z kodowania kluczy i wartości według dowolnych reguł,encodeURIComponent
ale AFAIK zawartość części zapytania jest całkowicie w 100% zależna od aplikacji. Poza tym chodzi tylko o to,#
że nie ma oficjalnego kodowania.Polecam
%20
.Czy je kodujesz?
Nie jest to jednak zbyt spójne we wszystkich językach. Jeśli się nie mylę, w PHP
urlencode()
traktuje się spacje jako,+
podczas gdy Pythonurlencode()
traktuje je jako%20
.EDYTOWAĆ:
Wygląda na to, że się mylę. Python
urlencode()
(przynajmniej w wersji 2.7.2) używaquote_plus()
zamiast,quote()
a zatem koduje spacje jako „+”. Wydaje się również, że zaleceniem W3C jest „+” zgodnie z tutaj: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1W rzeczywistości możesz śledzić tę interesującą debatę na temat własnego narzędzia do śledzenia problemów Pythona na temat tego, jak używać do kodowania spacji: http://bugs.python.org/issue13866 .
EDYCJA 2:
Rozumiem, że najczęstszym sposobem kodowania „” jest „+”, ale tylko uwaga, może to być tylko ja, ale wydaje mi się to nieco mylące:
źródło
URLEncoder.encode()
metoda w Javie zamienia go w+
jako dobrze.Spacja może być zakodowana tylko do „+” w części zapytania URL-a par „klucz / wartość typu„ application / x-www-form-urlencoded ” Moim zdaniem jest to MAJO, a NIE MUSI. W pozostałych adresach URL jest zakodowany jako% 20.
Moim zdaniem lepiej zawsze kodować spacje jako% 20, a nie jako „+”, nawet w części adresu URL zapytania, ponieważ to specyfikacja HTML (RFC-1866) określa, że znaki spacji powinny być kodowane jako „ + „in” application / x-www-form-urlencoded ”pary klucz-wartość typu treści (patrz ust. 8.2.1. akapit 1)
Ten sposób kodowania danych formularza podano również w późniejszych specyfikacjach HTML. Na przykład poszukaj odpowiednich akapitów na temat application / x-www-form-urlencoded w specyfikacji HTML 4.01 i tak dalej.
Oto przykładowy ciąg w adresie URL, w którym specyfikacja HTML pozwala na kodowanie spacji jako plusów: „ http://example.com/over/there?name=foo+bar ”. Tak więc, tylko po „?” Spacje można zastąpić plusami . W innych przypadkach spacje powinny być kodowane do% 20. Ponieważ jednak trudno jest poprawnie określić kontekst, najlepszą praktyką jest, aby nigdy nie kodować spacji jako „+”.
Poleciłbym procentowe kodowanie wszystkich znaków oprócz „niezarezerwowanych” zdefiniowanych w RFC-3986, str. 2.3
Implementacja zależy od wybranego języka programowania.
Jeśli twój adres URL zawiera znaki narodowe, najpierw zakoduj je w UTF-8, a następnie procentowo koduj wynik.
źródło