Was ist der Unterschied zwischen den JavaScript-Funktionen decodeURIComponent
y decodeURI
?
Antworten
Zu viele Anzeigen?Um den Unterschied zwischen diesen beiden zu erklären, möchte ich den Unterschied zwischen encodeURI
y encodeURIComponent
.
Der Hauptunterschied besteht darin, dass:
- En
encodeURI
ist für die Verwendung des vollständigen URI vorgesehen. - En
encodeURIComponent
Funktion ist für nun ja URI-Komponenten gedacht, d. h. jeder Teil, der zwischen Trennzeichen liegt (; / ? : @ & = + $ , #).
Also, in encodeURIComponent
Diese Trennzeichen werden ebenfalls kodiert, da sie als Text und nicht als Sonderzeichen betrachtet werden.
Nun zurück zu den Unterschieden zwischen den Dekodierfunktionen. Jede Funktion dekodiert Zeichenketten, die von ihrem entsprechenden Enkodier-Gegenstück erzeugt wurden, wobei sie sich um die Semantik der Sonderzeichen und deren Behandlung kümmert.
EncodeURIComponent/decodeURIComponent() ist fast immer das Paar, das Sie für die Verkettung und Aufspaltung von Textstrings in URI-Teilen verwenden sollten.
encodeURI ist weniger gebräuchlich und hat einen irreführenden Namen: Es sollte eigentlich fixBrokenURI heißen. Es nimmt etwas, das fast ein URI ist, aber ungültige Zeichen wie Leerzeichen enthält, und verwandelt es in einen echten URI. Es hat eine gültige Verwendung, um ungültige URIs aus Benutzereingaben zu korrigieren, und es kann auch verwendet werden, um einen IRI (URI mit bloßen Unicode-Zeichen) in einen einfachen URI zu verwandeln (unter Verwendung von %-escaped UTF-8, um die Nicht-ASCII-Zeichen zu kodieren).
Wo encodeURI eigentlich fixBrokenURI() heißen müsste, könnte decodeURI() auch potentiallyBreakMyPreviouslyWorkingURI() heißen. Mir fällt nirgendwo eine sinnvolle Verwendung dafür ein; vermeiden.
js> s = "http://www.example.com/string with + and ? and & and spaces";
http://www.example.com/string with + and ? and & and spaces
js> encodeURI(s)
http://www.example.com/string%20with%20+%20and%20?%20and%20&%20and%20spaces
js> encodeURIComponent(s)
http%3A%2F%2Fwww.example.com%2Fstring%20with%20%2B%20and%20%3F%20and%20%26%20and%20spaces
Sieht aus wie encodeURI
erzeugt einen "sicheren" URI, indem es Leerzeichen und einige andere (z. B. nicht druckbare) Zeichen kodiert, während encodeURIComponent
kodiert zusätzlich den Doppelpunkt, den Schrägstrich und die Pluszeichen und ist für die Verwendung in Abfragezeichenfolgen gedacht. Die Kodierung von + und ? und & ist hier von besonderer Bedeutung, da es sich um Sonderzeichen in Abfragezeichenfolgen handelt.
Da ich die gleiche Frage hatte, aber hier keine Antwort gefunden habe, habe ich einige Tests gemacht, um herauszufinden, was der Unterschied ist. Ich habe dies getan, da ich die Kodierung für etwas benötige, das nicht URL/URI-bezogen ist.
encodeURIComponent("A")
ein "A" zurückgibt, wird "A" nicht in "%41" kodiert.decodeURIComponent("%41")
gibt "A" zurück.encodeURI("A")
ein "A" zurückgibt, wird "A" nicht in "%41" kodiert.decodeURI("%41")
gibt "A" zurück.
-Das bedeutet, dass beide alphanumerische Zeichen dekodieren können, auch wenn sie sie nicht kodiert haben. Allerdings ...
encodeURIComponent("&")
gibt "%26" zurück.decodeURIComponent("%26")
gibt "&" zurück.encodeURI("&")
gibt "&" zurück.decodeURI("%26")
gibt "%26" zurück.
Auch wenn encodeURIComponent nicht alle Zeichen kodiert, kann decodeURIComponent jeden Wert zwischen %00 und %7F dekodieren.
Hinweis: Wenn Sie versuchen, einen Wert über %7F zu dekodieren (es sei denn, es handelt sich um einen Unicode-Wert), wird Ihr Skript mit einem "URI-Fehler" fehlschlagen.
encodeURIComponent()
Konvertiert die Eingabe in eine URL-kodierte Zeichenfolge
encodeURI()
URL-Kodierung der Eingabe, aber geht davon aus, dass eine vollständige URL angegeben wird, so dass gibt eine gültige URL zurück, indem es nicht kodiert das Protokoll (z.B. http:// ) und Hostname (z. B. www.stackoverflow.com ).
decodeURIComponent()
y decodeURI()
sind das Gegenteil von dem, was oben steht
- See previous answers
- Weitere Antworten anzeigen