Welche dieser beiden Methoden sollte für die Kodierung von URLs verwendet werden?
Antworten
Zu viele Anzeigen?EncodeURIComponent() : geht davon aus, dass sein Argument ein Teil (wie das Protokoll, der Hostname, der Pfad oder die Abfragezeichenfolge) eines URIs ist. Daher werden die Interpunktionszeichen, die zur Trennung der Teile eines URI verwendet werden, umgangen.
encodeURI(): wird für die Kodierung bestehender URLs verwendet
Der Unterschied zwischen encodeURI
y encodeURIComponent
:
encodeURIComponent(value)
wird hauptsächlich zur Kodierung von queryString-Parameterwerten verwendet und kodiert jedes anwendbare Zeichen in value
. encodeURI
ignoriert das Protokollpräfix ( http://
) und Domänenname.
In sehr, sehr seltenen Fällen, wenn Sie eine manuelle Kodierung implementieren wollen, um zusätzliche Zeichen zu kodieren (obwohl sie in typischen Fällen nicht kodiert werden müssen), wie z. B.: ! *
, dann können Sie verwenden:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
( Quelle )
Andere Antworten beschreiben den Zweck. Hier sind die Zeichen jede Funktion wird tatsächlich konvertieren :
control = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F'
+ '\x10\x11\x12\x13\x14\X15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F'
+ '\x7F'
encodeURI (control + ' "%<>[\\]^`{|}' )
encodeURIComponent(control + ' "%<>[\\]^`{|}' + '#$&,:;=?' + '+/@' )
escape (control + ' "%<>[\\]^`{|}' + '#$&,:;=?' + "!'()~")
Alle oben genannten Zeichen werden in Prozent-Hexadezimal-Codes umgewandelt. Leerzeichen bis %20
Prozent auf %25
, usw. Die nachstehenden Zeichen werden unverändert weitergegeben.
Hier sind die Zeichen der Funktionen wird NICHT konvertieren :
pass_thru = '*-._0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
encodeURI (pass_thru + '#$&,:;=?' + '+/@' + "!'()~")
encodeURIComponent(pass_thru + "!'()~")
escape (pass_thru + '+/@' )
Als allgemeine Regel gilt encodeURIComponent
. Lassen Sie sich nicht von dem langen Namen abschrecken, wenn Sie denken, er sei spezifischer in der Verwendung, für mich ist er die am häufigsten verwendete Methode. Lassen Sie sich auch nicht dazu verleiten, encodeURI zu verwenden, weil Sie es getestet haben und es richtig zu kodieren scheint. Es ist wahrscheinlich nicht das, was Sie verwenden wollten, und obwohl Ihr einfacher Test mit "Fred" in einem Vornamenfeld funktioniert hat, werden Sie später feststellen, dass es fehlschlägt, wenn Sie einen fortgeschritteneren Text verwenden, z. B. ein kaufmännisches Und oder ein Hashtag hinzufügen. Die Gründe dafür können Sie in den anderen Antworten nachlesen.
- See previous answers
- Weitere Antworten anzeigen