Sie sollten nicht verwenden encodeURIComponent()
oder encodeURI()
. Sie sollten fixedEncodeURIComponent()
und fixedEncodeURI()
gemäß der MDN-Dokumentation verwenden.
In Bezug auf encodeURI()
...
Wenn Sie dem neueren RFC3986 für URLs folgen möchten, bei dem eckige Klammern reserviert (für IPv6) und daher nicht codiert werden, wenn etwas gebildet wird, das Teil einer URL sein könnte (z. B. ein Host), kann das folgende Codeausschnitt hilfreich sein:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
In Bezug auf encodeURIComponent()
...
Um bei der Einhaltung von RFC 3986 (das reserviert !, ', (,) Und *) strenger zu sein, kann Folgendes sicher verwendet werden, obwohl diese Zeichen keine formalisierten URI-Begrenzungsverwendungen haben:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
Was ist der Unterschied? fixedEncodeURI()
und fixedEncodeURIComponent()
konvertieren Sie den gleichen Satz von Werten, fixedEncodeURIComponent()
konvertieren Sie aber auch diesen Satz : +@?=:*#;,$&
. Dieser Satz wird in verwendet GET
Parameter ( &
, +
usw.), Anker - Tags ( #
), Wildcard - Tags ( *
), E - Mail / Benutzername Teile ( @
), etc ..
Beispiel: Wenn Sie verwenden encodeURI()
, user@example.com/?email=me@home
wird die Sekunde nicht ordnungsgemäß @
an den Server gesendet, außer wenn Ihr Browser die Kompatibilität übernimmt (wie Chrome dies natürlich häufig tut).