Kiedy jest spacja w adresie URL zakodowanym do +
i kiedy jest kodowana do %20
?URL kodujący znak spacji: + lub% 20?
Odpowiedz
Od Wikipedia (podkreślenie i linkiem dodanej):
Gdy dane, które zostały wprowadzone w formularzach HTML jest złożony, nazwy pól formularza i wartości są kodowane i przesyłane do serwera w komunikacie żądania HTTP za pomocą metoda GET lub POST lub historycznie za pośrednictwem poczty e-mail. Kodowanie używane domyślnie opiera się na bardzo wczesnej wersji ogólnych zasad kodowania procentowego URI, z number of modifications, takich jak normalizacja nowej linii i zastępowanie spacji "+" zamiast "% 20". Dane MIME zakodowane w ten sposób to application/x-www-form-urlencoded, a obecnie jest on zdefiniowany (nadal w bardzo przestarzałym stylu) w specyfikacjach HTML i XForms.
więc procent kodowania rzeczywistym wykorzystuje %20
a dane w postaci URL w zmodyfikowanej postaci, która wykorzystuje +
. Dlatego najprawdopodobniej zobaczysz tylko +
w adresach URL w ciągu zapytania po ?
.
Więc + kodowanie byłoby technicznie wieloczęściowe/kodowanie danych formularzy, a kodowanie procentowe to application/x-www-form-urlencoded? –
@BC: no - 'multipart/form-data' używa kodowania MIME; 'application/x-www-form-urlencoded' używa' + ', a poprawnie zakodowane identyfikatory URI używają'% 20'. – McDowell
"Więc najprawdopodobniej zobaczysz tylko + w adresach URL w ciągu zapytania po znaku?" Jest niedopowiedzeniem. Nigdy nie powinieneś widzieć "+" w części ścieżki adresu URL, ponieważ nie zrobi to, czego oczekujesz (spacja). –
Polecam %20
.
Czy je kodujesz?
Nie jest to jednak spójne w wielu językach. Jeśli się nie mylę, w PHP urlencode()
traktuje spacje jako +
, podczas gdy Python urlencode()
traktuje je jako %20
.
EDYTOWANIE:
Wygląda na to, że się mylę. Python urlencode()
(przynajmniej w 2.7.2) używa quote_plus()
zamiast quote()
i tym samym koduje spacje jako "+". Wydaje się również, że rekomendacja W3C jest „+” zgodnie tutaj: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1
I rzeczywiście, można śledzić tę interesującą debatę na własnym trackerze emisyjnej Pythona o tym, co ma być używany do kodowania spacji: http://bugs.python.org/issue13866.
EDIT # 2:
Rozumiem, że najczęstszym sposobem kodowania „” jest jak „+”, ale po prostu uwaga, to może być tylko mnie, ale uważam, że to nieco mylące:
import urllib
print(urllib.urlencode({' ' : '+ '})
>>> '+=%2B+'
Nie hardcoding. Próbuję określić z perspektywy estetycznej, jak będą wyglądały moje adresy zawierające spacje. –
PHP ma również 'rawurlencode()', który używa '% 20'. – eyelidlessness
'urlencode()' Pythona traktuje je jako '+' – Yarin
To zamieszanie jest spowodowane tym, że adres URL jest nadal "uszkodzony" do dnia dzisiejszego.
Weźmy na przykład "http://www.google.com". To jest adres URL. Adres URL to Uniform Resource Locator i jest w rzeczywistości wskaźnikiem do strony internetowej (w większości przypadków). Adresy URL mają bardzo dobrze zdefiniowaną strukturę od czasu pierwszej specyfikacji w 1994 roku.
Możemy wyodrębnić szczegółowe informacje o "http://www.google.com" URL:
+---------------+-------------------+
| Part | Data |
+---------------+-------------------+
| Scheme | http |
| Host | www.google.com |
+---------------+-------------------+
Jeśli spojrzymy na bardziej złożonej zawartości, takie jak:
"https://bob:[email protected]:8080/file;p=1?q=2#third"
my może wydobyć następujące informacje:
+-------------------+---------------------+
| Part | Data |
+-------------------+---------------------+
| Scheme | https |
| User | bob |
| Password | bobby |
| Host | www.lunatech.com |
| Port | 8080 |
| Path | /file;p=1 |
| Path parameter | p=1 |
| Query | q=2 |
| Fragment | third |
+-------------------+---------------------+
https://bob:[email protected]:8080/file;p=1?q=2#third
\___/ \_/ \___/ \______________/ \__/\_______/ \_/ \___/
| | | | | | \_/ | |
Scheme User Password Host Port Path | | Fragment
\_____________________________/ | Query
| Path parameter
Authority
Zarezerwowane znaki są różne dla każdej części.
Dla adresów HTTP, spacja w części fragmentu ścieżki musi być zakodowana do "% 20" (nie absolutnie nie "+"), podczas gdy znak "+" w części fragmentu ścieżki może pozostać nie zakodowany.
Teraz w części kwerendy spacje mogą być zakodowane do "+" (dla kompatybilności wstecznej: nie próbuj szukać go w standardzie URI) lub "% 20" podczas gdy znak "+" (jako wynik tej niejednoznaczności) musi być zmieniony na "% 2B".
Oznacza to, że „niebieski + niebieski” łańcuch ma być zakodowany różny sposób w części toru i zapytań:
„http://example.com/blue+light%20blue?blue%2Blight+blue”.
Z tego można wywnioskować, że kodowanie w pełni zbudowanego adresu URL jest niemożliwe bez znajomości składni struktury adresu URL.
Co to sprowadza się do:
Trzeba %20
przed ?
i +
po.
>> powinieneś mieć% 20 przed? i + po Przepraszamy za głupie pytanie. Wiem trochę jak ten parametr hashtag jest używany po "?" parametr znaku zapytania. Chociaż jest inaczej, ponieważ użycie "#" nie powoduje przeładowania strony. Ale próbuję użyć znaku% 20 i + po hashtagu "#" i wygląda na to, że nie działa. Którego użyć po "#"? – Philcyb
@Philcyb Możesz przeczytać ten artykuł https://en.wikipedia.org/wiki/Percent-encoding –
przestrzeń może być zakodowany tylko w "+" w parach klucz wartość "application/x-www postać urlencoded" zawartość typu zapytania część zawartości. To MAY, a nie MUSI. W pozostałych adresach URL jest zakodowany jako% 20.
Moim zdaniem lepiej jest zawsze zakodować spacje jako% 20, a nie jako "+", nawet w części kwerendy adresu URL, ponieważ jest to specyfikacja HTML (RFC-1866), która określa, że spacje powinny być zakodowane jako "+" w parach klucz-wartość typu content-application/x-www-form-urlencoded. (patrz paragraf 8.2.1, akapit 1). Ten sposób kodowania danych formularzy jest również podany w późniejszych specyfikacjach HTML, na przykład poszukaj odpowiednich akapitów o aplikacji/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 umożliwia zakodowanie spacji jako plusy: "http://example.com/over/there?name=foo+bar". Tak więc, tylko po "?", Spacje mogą być zastąpione przez plusy, zgodnie ze specyfikacją HTML. W innych przypadkach spacje powinny być zakodowane do% 20. Ale ponieważ trudno jest poprawnie określić kontekst, najlepiej jest nigdy nie kodować spacji jako "+".
Polecam kodowanie procentowe wszystkich znaków oprócz "bez zastrzeżeń" zdefiniowanych w RFC-3986, p.2.3
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~"
Implementacja zależy od wybranego języka programowania.
Jeśli adres URL zawiera znaki narodowe, najpierw zakoduj je w UTF-8, a następnie zakoduj wynik w procentach.
Dlaczego ktoś powinien dbać o specyfikację HTML, jeśli żądany zasób nie jest HTML? Widziałem "+" w niektórych Web API, które nie reagują na HTML, np. prosisz o pdf. Uważam za błędne, że nie używają "% 20". –
- 1. python regex: aby dopasować znak spacji lub koniec łańcucha
- 2. Czy Nginx wypisuje/usunie paskowy znak URL przed dopasowaniem?
- 3. dodaj znak spacji w tekście Typoscript
- 4. Parametr adresu URL języka Java zastępuje% 20 spacją
- 5. Dlaczego HttpUtility.UrlEncode (HttpUtility.UrlDecode ("% 20")) zwraca + zamiast% 20?
- 6. Jak zamienić znak w NSString bez wstawiania spacji?
- 7. Jak wymusić% 20 zamiast + w System.Net.WebUtility.UrlEncode
- 8. Spring REST URL Encoding Scheme:% 20 or + Który?
- 9. Uciekający znak ampersand w adresie URL
- 10. dlaczego znak # jest dodawany do adresu URL?
- 11. Wyświetlanie większą lub równą znak
- 12. Rysuj() 20 000 32 na 32 Tekstury lub 1 duża tekstura 20 000 razy
- 13. Java - Jak napisać bardzo duży (20 000 x 20 000 pikseli lub większy) obraz TIF
- 14. kodujący czytelny film przez QuickTime przy użyciu FFMPEG
- 15. wstawianie spacji w xslt
- 16. java.lang.IllegalArgumentException: Nieprawidłowy URL lub zasób nie znaleziono
- 17. java.lang.IllegalArgumentException: znak kontrolny wartości ciasteczka lub atrybutu
- 18. Ustal, czy znak jest liczbą lub literą
- 19. Uncaught SyntaxError: nieprawidłowy lub nieoczekiwany znak
- 20. Przestrzeń HTML wyświetla się jako% 2520 zamiast% 20
- 21. kodowanie javascript i zamiana spacji na + symbole
- 22. UITabBarController - więcej niż 20 wyświetleń
- 23. Polityka Restkit Cache 20.x
- 24. Rozwiń ciąg znaków według co najmniej jednej spacji lub kart:
- 25. Dlaczego Google Closure Compiler pozostawia kilka niepotrzebnych spacji lub linii?
- 26. Usuwanie automatycznie kończących spacji lub za pomocą skrótu
- 27. WPF Datagrid Wybór wielokrotny bez CTRL lub spacji
- 28. Tworzenie ciąg zn spacji lub innych powtarzających się znaków
- 29. Java Regex: Jak dopasować jeden lub więcej znaków spacji
- 30. Ajax nie działa w IE, jeśli URL zawiera arabski znak
To pytanie byłoby bardziej pomocne w przypadku kilku pytań związanych z konkretnym językiem, prawda? – squarecandy
Możliwy duplikat [Kiedy zakodować spację na plus (+) lub% 20?] (Http://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-or-20) – user
@ użytkownik pytanie, które łączysz, zostało zadane później, co czyni go dupe, a nie tym. –