1505 Stimmen

Wann sollten Sie Escape anstelle von encodeURI / encodeURIComponent verwenden?

Bei der Kodierung einer an einen Webserver zu sendenden Abfragezeichenfolge - wann verwenden Sie escape() und wann verwenden Sie encodeURI() o encodeURIComponent() :

Escape verwenden:

escape("% +&=");

OR

encodeURI() / encodeURIComponent() verwenden

encodeURI("http://www.google.com?var1=value1&var2=value2");

encodeURIComponent("var1=value1&var2=value2");

135 Stimmen

Es ist erwähnenswert, dass encodeURIComponent("var1=value1&var2=value2") es no der typische Anwendungsfall. Dieses Beispiel kodiert die = et & was wahrscheinlich nicht beabsichtigt war! encodeURIComponent wird in der Regel nur auf den Wert in jedem Schlüssel-Wert-Paar angewendet (der Teil nach jedem = ).

3 Stimmen

Müssen Sie irgendetwas an dem Schlüssel machen? Was ist, wenn er ein = enthält? (Ist das überhaupt möglich?)

3 Stimmen

@Mala Ich bin noch neu in der Web-Programmierung im Allgemeinen, aber was ich in meiner begrenzten Erfahrung verwendet habe, ist, den Schlüssel und den Wert getrennt zu kodieren, um sicherzustellen, dass das "=" bleibt: var params = encodeURIComponent(key) + '=' + encodeURIComponent(value); - Vielleicht weiß jemand anders einen besseren Weg.

4voto

Michael Punkte 20836

Die akzeptierte Antwort ist gut. Um auf den letzten Teil einzugehen:

Beachten Sie, dass encodeURIComponent das Zeichen ' nicht entschlüsselt. Ein häufiger Fehler ist die Verwendung zur Erstellung von HTML-Attributen wie href='MyUrl', die einen Injektionsfehler haben könnte. Wenn Sie html aus Strings konstruieren, verwenden Sie entweder " anstelle von ' für Attributanführungszeichen, oder fügen Sie eine zusätzliche Kodierungsschicht (' kann als %27 kodiert werden).

Wenn Sie auf Nummer sicher gehen wollen, prozentuale Kodierung nicht reservierter Zeichen sollte ebenfalls kodiert werden.

Sie können diese Methode verwenden, um ihnen zu entkommen (Quelle Mozilla )

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

// fixedEncodeURIComponent("'") --> "%27"

3voto

ryanpcmcquen Punkte 5837

Moderne Umformulierung der Antwort von @johann-echavarria:

console.log(
    Array(256)
        .fill()
        .map((ignore, i) => String.fromCharCode(i))
        .filter(
            (char) =>
                encodeURI(char) !== encodeURIComponent(char)
                    ? {
                          character: char,
                          encodeURI: encodeURI(char),
                          encodeURIComponent: encodeURIComponent(char)
                      }
                    : false
        )
)

Oder wenn Sie eine Tabelle verwenden können, ersetzen Sie console.log avec console.table (für die hübschere Ausgabe).

0 Stimmen

Ich denke, was Sie meinten, war ``` console.table( Array(256) .fill() .map((ignore, i) => { char = String.fromCharCode(i); return { character: char, encodeURI: encodeURI(char), encodeURIComponent: encodeURIComponent(char) } }) .filter( (charObj) => encodeURI(charObj.character) !== encodeURIComponent(charObj.character) ) ) ```

2voto

molokoloco Punkte 4266

Ich habe diese Funktion...

var escapeURIparam = function(url) {
    if (encodeURIComponent) url = encodeURIComponent(url);
    else if (encodeURI) url = encodeURI(url);
    else url = escape(url);
    url = url.replace(/\+/g, '%2B'); // Force the replacement of "+"
    return url;
};

5 Stimmen

@ChristianVielma escape() ist veraltet, aber verweist nie auf w3schools.com. siehe w3fools.com

5 Stimmen

@Christian Vielma - Manche finden die Referenzmaterial unter W3Schulen zu sein weniger umstritten und nützlich . Nicht alle sind der Meinung, dass W3Schools niemals referenziert werden sollte.

2 Stimmen

W3Schools hat einen schlechten Ruf. Sicher, sie sind nicht immer genau, aber dann wieder habe ich über viele Blog-Post, die geradezu falsch ist als gut kommen. Für mich ist es manchmal ein guter Ausgangspunkt, um einige der Terminologie zu lernen und dann tauche ich ein wenig tiefer mit anderen Ressourcen. Das Wichtigste ist, dass eine einzige Quelle niemals biblisch sein sollte, wenn es um diese Art von Dingen geht.

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