437 Stimmen

Sollte ich encodeURI oder encodeURIComponent für die Kodierung von URLs verwenden?

Welche dieser beiden Methoden sollte für die Kodierung von URLs verwendet werden?

478voto

Quentin Punkte 850700

Das hängt davon ab, was Sie eigentlich tun wollen.

encodeURI geht davon aus, dass die Eingabe ein vollständiger URI ist, der einige Zeichen enthalten kann, die kodiert werden müssen.

encodeURIComponent kodiert alles, was eine besondere Bedeutung hat, also verwenden Sie es für Komponenten von URIs wie

var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);

179voto

SLaks Punkte 832502

Wenn Sie eine Zeichenkette kodieren, um sie in eine URL-Komponente (einen Querystring-Parameter) einzufügen, sollten Sie encodeURIComponent .

Wenn Sie eine vorhandene URL kodieren, rufen Sie encodeURI .

65voto

Frank Wang Punkte 394

Hier ist eine Zusammenfassung.

  1. escape() wird @ * _ + - nicht kodieren. /

    Verwenden Sie es nicht.

  2. encodeURI() kodiert nicht A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

    Verwenden Sie es, wenn Ihre Eingabe eine vollständige URL ist, wie ' https://searchexample.com/search?q=wiki '

  3. encodeURIComponent() wird A-Z a-z 0-9 - _ nicht kodieren. ! ~ * ' ( ) Verwenden Sie es, wenn Ihre Eingabe Teil einer vollständigen URL ist e const queryStr = encodeURIComponent(someString)

61voto

BrianFreud Punkte 6294

xkr.us hat eine großartige Diskussion mit Beispielen. Um ihre Zusammenfassung zu zitieren:

Die Methode escape() kann nicht auf der Serverseite als Leerzeichen interpretiert wird und auch von Formularen mit Leerzeichen in ihren Feldern. Aufgrund dieses Mangels und der Tatsache, dass Tatsache, dass diese Funktion Nicht-ASCII-Zeichen nicht korrekt behandelt nicht korrekt behandelt, sollten Sie die Verwendung von escape() wann immer möglich vermeiden. Die beste Alternative ist normalerweise encodeURIComponent().

escape() wird nicht kodieren: @*/+

Die Verwendung der Methode encodeURI() ist ein wenig spezieller als escape() insofern, als sie URIs kodiert, im Gegensatz zum Querystring, der Teil einer URL ist. Verwenden Sie diese Methode, wenn Sie einen String kodieren müssen, der für eine Ressource kodieren müssen, die URIs verwendet und bei der bestimmte Zeichen unkodiert bleiben müssen. Beachten Sie, dass diese Methode nicht das Zeichen ' nicht kodiert, da es ein gültiges Zeichen in URIs ist.

encodeURI() wird nicht verschlüsseln: ~!@#$&*()=:/,;?+'

Schließlich sollte in den meisten Fällen die Methode encodeURIComponent() verwendet werden verwendet werden, wenn eine einzelne Komponente eines URIs kodiert werden soll. Diese Methode kodiert bestimmte Zeichen, die normalerweise als Sonderzeichen für URIs erkannt werden URIs erkannt werden, so dass viele Komponenten enthalten sein können. Beachten Sie, dass diese Methode das Zeichen ' nicht kodiert, da es ein gültiges Zeichen in URIs ist.

encodeURIComponent() wird nicht kodieren: ~!*()'

45voto

Pulkit Aggarwal Punkte 2266

encodeURI y encodeURIComponent werden für unterschiedliche Zwecke verwendet.
Einige der Unterschiede sind

  1. encodeURI wird verwendet, um eine vollständige URL kodieren während encodeURIComponent wird verwendet für Kodierung einer URI-Komponente wie zum Beispiel eine Abfragezeichenfolge.

  2. Es gibt 11 Zeichen die nicht durch encodeURI, sondern durch encodeURIComponent kodiert werden. Liste:

Zeichen

encodeURI

encodeURIComponent

#

#

%23

$

$

%24

&

&

%26

+

+

%2B

,

,

%2C

/

/

%2F

%3A

;

;

%3B

\=

\=

%3D

?

?

%3F

@

@

%40

Anmerkungen:
encodeURIComponent verschlüsselt nicht -_.!~*'(). Wenn Sie wollen, dass diese Zeichen kodiert werden, müssen Sie sie durch eine entsprechende UTF-8-Zeichenfolge ersetzen

Wenn Sie mehr über encodeURI und encodeURIComponent erfahren möchten, lesen Sie bitte den Referenzlink. Referenz-Link

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