465 Stimmen

Was ist der Unterschied zwischen decodeURIComponent und decodeURI?

Was ist der Unterschied zwischen den JavaScript-Funktionen decodeURIComponent y decodeURI ?

485voto

MahdeTo Punkte 10654

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.

134voto

bobince Punkte 512550

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.

83voto

Jason S Punkte 178087
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.

37voto

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.

31voto

Russ Cam Punkte 120837

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X