Um den Unterschied zwischen diesen beiden zu erklären, möchte ich den Unterschied zwischen encodeURI
und erklären encodeURIComponent
.
Der Hauptunterschied ist, dass:
- Die
encodeURI
Funktion ist für die Verwendung auf dem vollständigen URI vorgesehen.
- Die
encodeURIComponent
Funktion soll für .. gut .. URI-Komponenten verwendet werden, bei denen es sich um Teile handelt, die zwischen Trennzeichen liegen (; / ?: @ & = + $, #).
In encodeURIComponent
diesen werden Trennzeichen also auch deshalb codiert, weil sie als Text und nicht als Sonderzeichen betrachtet werden.
Zurück zum Unterschied zwischen den Decodierungsfunktionen: Jede Funktion decodiert Zeichenfolgen, die von ihrem entsprechenden Codierungsgegenstück generiert wurden, wobei die Semantik der Sonderzeichen und ihre Behandlung berücksichtigt werden.
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";
encodeURIComponent / decodeURIComponent () ist fast immer das Paar, das Sie zum Verketten und Aufteilen von Textzeichenfolgen in URI-Teilen verwenden möchten.
encodeURI ist weniger verbreitet und irreführend benannt: Es sollte eigentlich fixBrokenURI heißen. Es braucht etwas, das fast eine URI ist, aber ungültige Zeichen wie Leerzeichen enthält, und verwandelt es in eine echte URI. Es hat eine gültige Verwendung beim Korrigieren ungültiger URIs aus Benutzereingaben und kann auch verwendet werden, um einen IRI (URI mit bloßen Unicode-Zeichen in) in einen einfachen URI umzuwandeln (unter Verwendung von% -escaped UTF-8 zum Codieren des Nicht-ASCII ).
decodeURI dekodiert bis auf einige Sonderzeichen dieselben Zeichen wie decodeURIComponent. Es wird als Inverse von encodeURI bereitgestellt, aber Sie können sich immer noch nicht darauf verlassen, dass es dasselbe zurückgibt, wie Sie es ursprünglich eingegeben haben - siehe z.
decodeURI(encodeURI('%20 '));
.Wo encodeURI eigentlich fixBrokenURI () heißen sollte, könnte decodeURI () auch potentiell BreakMyPreviousWorkingURI () heißen. Ich kann mir nirgendwo eine gültige Verwendung dafür vorstellen; vermeiden.
quelle
Es sieht so
encodeURI
aus, als würde durch Codieren von Leerzeichen und einigen anderen (z. B. nicht druckbaren) Zeichen ein "sicherer" URI erzeugt, währendencodeURIComponent
zusätzlich der Doppelpunkt sowie Schrägstriche und Pluszeichen codiert werden und in Abfragezeichenfolgen verwendet werden sollen. Die Kodierung von + und? und & ist hier von besonderer Bedeutung, da dies Sonderzeichen in Abfragezeichenfolgen sind.quelle
Da ich die gleiche Frage hatte, aber hier keine Antwort fand, machte ich einige Tests, um herauszufinden, was der Unterschied tatsächlich ist. Ich habe dies getan, da ich die Codierung für etwas benötige, das nicht mit URL / URI zusammenhängt.
encodeURIComponent("A")
gibt "A" zurück, es wird "A" nicht in "% 41" codiert.decodeURIComponent("%41")
gibt "A" zurück.encodeURI("A")
gibt "A" zurück, es wird "A" nicht in "% 41" codiert.decodeURI("%41")
gibt "A" zurück.-Das bedeutet, dass beide alphanumerische Zeichen dekodieren können, obwohl sie diese nicht kodiert haben. Jedoch...
encodeURIComponent("&")
gibt "% 26" zurück.decodeURIComponent("%26")
kehrt zurück "&".encodeURI("&")
kehrt zurück "&".decodeURI("%26")
gibt "% 26" zurück.Obwohl encodeURIComponent nicht alle Zeichen codiert, kann decodeURIComponent jeden Wert zwischen% 00 und% 7F decodieren.
Hinweis: Wenn Sie versuchen, einen Wert über% 7F zu dekodieren (es sei denn, es handelt sich um einen Unicode-Wert), schlägt Ihr Skript anscheinend mit einem "URI-Fehler" fehl.
quelle
decodeURIComponent()
unddecodeURI()
sind das Gegenteil von obenquelle
decodeURIComponent dekodiert spezielle URI-Marker wie &,?, # usw., decodeURI nicht.
quelle
encodeURIComponent Not Escaped:
encodeURI () Nicht entkommen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
quelle