Welche dieser beiden Methoden sollte zum Codieren von URLs verwendet werden?
javascript
Aditya Shukla
quelle
quelle
encodeURI
nicht/
so codiert :encodeURIComponent("ac/dc")
=>ac%2Fdc
undencodeURI("ac/dc")
=>ac/dc
"encodeURIComponent() and encodeURI() encode a URI by replacing URL reserved characters with their UTF-8 encoding....They differ because encodeURI does not encode queryString or hash values...URLs do not allow many special characters, like spaces or slashes. However these special characters are part of life, so URL encoding was invented."
QuelleencodeURIComponent differs from encodeURI as follows
: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Antworten:
Es hängt davon ab, was Sie tatsächlich tun möchten.
encodeURI geht davon aus, dass es sich bei der Eingabe um eine vollständige URI handelt, die möglicherweise einige Zeichen enthält, die codiert werden müssen.
encodeURIComponent codiert alles mit besonderer Bedeutung, sodass Sie es für Komponenten von URIs wie z
quelle
Wenn Sie eine Zeichenfolge zum Einfügen in eine URL-Komponente (einen Querystring-Parameter) codieren, sollten Sie aufrufen
encodeURIComponent
.Wenn Sie eine vorhandene URL verschlüsseln, rufen Sie an
encodeURI
.quelle
xkr.us hat eine großartige Diskussion mit Beispielen. Um ihre Zusammenfassung zu zitieren:
quelle
encodeURI
schlägt fehl , wenn Sie versuchen , einen Dateinamen zu einer URL zu konvertieren und der Dateiname hat#
in ihmHier ist eine Zusammenfassung.
Escape () codiert @ * _ + - nicht. /.
Benutze es nicht.
encodeURI () codiert AZ az 0-9 nicht; , /? : @ & = + $ - _. ! ~ * '() #
Verwenden Sie diese Option, wenn Ihre Eingabe eine vollständige URL wie " https://searchexample.com/search?q=wiki " ist.
const queryStr = encodeURIComponent(someString)
quelle
encodeURIComponent (): Nimmt an, dass sein Argument ein Teil (wie das Protokoll, der Hostname, der Pfad oder die Abfragezeichenfolge) eines URI ist. Daher entgeht es den Interpunktionszeichen, die zum Trennen der Teile eines URI verwendet werden.
encodeURI (): wird zum Codieren der vorhandenen URL verwendet
quelle
Unterschied zwischen
encodeURI
undencodeURIComponent
:encodeURIComponent(value)
wird hauptsächlich zum Codieren von queryString-Parameterwerten verwendet und codiert jedes zutreffende Zeichen invalue
.encodeURI
ignoriert das Protokollpräfix (http://
) und den Domänennamen.In sehr, sehr seltenen Fällen, wenn Sie die manuelle Codierung implementieren möchten, um zusätzliche Zeichen zu codieren (obwohl diese in typischen Fällen nicht codiert werden müssen), wie:,
! *
können Sie Folgendes verwenden:( Quelle )
quelle
Andere Antworten beschreiben die Zwecke. Hier sind die Zeichen, die jede Funktion tatsächlich konvertiert :
Alle oben genannten Zeichen werden in Prozent-Hexadezimal-Codes konvertiert. Leerzeichen bis
%20
, Prozent bis%25
usw. Die folgenden Zeichen werden unverändert durchlaufen.Hier sind die Zeichen, die die Funktionen NICHT konvertieren :
quelle
In der Regel verwenden
encodeURIComponent
. Haben Sie keine Angst vor dem langen Namen und denken Sie, dass er spezifischer in seiner Verwendung ist. Für mich ist es die am häufigsten verwendete Methode. Lassen Sie sich auch nicht dazu verleiten, encodeURI zu verwenden, da Sie es getestet haben und es anscheinend richtig codiert. Es ist wahrscheinlich nicht das, was Sie verwenden wollten, und obwohl Ihr einfacher Test mit "Fred" in einem Vornamenfeld funktioniert hat, werden Sie feststellen Später, wenn Sie fortgeschritteneren Text wie das Hinzufügen eines kaufmännischen Und oder eines Hashtags verwenden, schlägt dies fehl. Sie können sich die anderen Antworten aus den Gründen ansehen, warum dies so ist.quelle