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?

12voto

Gopal Punkte 441

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

12voto

T.Todua Punkte 48569

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 )

5voto

Bob Stein Punkte 14259

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 +              '+/@'          )

-1voto

Post Impatica Punkte 12869

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.

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