Inspiriert durch Johanns Tisch habe ich beschlossen, die Tabelle zu erweitern. Ich wollte sehen, welche ASCII-Zeichen kodiert werden.
![screenshot of console.table]()
var ascii = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
var encoded = [];
ascii.split("").forEach(function (char) {
var obj = { char };
if (char != encodeURI(char))
obj.encodeURI = encodeURI(char);
if (char != encodeURIComponent(char))
obj.encodeURIComponent = encodeURIComponent(char);
if (obj.encodeURI || obj.encodeURIComponent)
encoded.push(obj);
});
console.table(encoded);
Die Tabelle zeigt nur die kodierten Zeichen. Leere Zellen bedeuten, dass das Original und die kodierten Zeichen identisch sind.
Nur um sicherzugehen, füge ich eine weitere Tabelle für urlencode()
gegen rawurlencode()
. Der einzige Unterschied scheint die Kodierung des Leerzeichens zu sein.
![screenshot of console.table]()
<script>
<?php
$ascii = str_split(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", 1);
$encoded = [];
foreach ($ascii as $char) {
$obj = ["char" => $char];
if ($char != urlencode($char))
$obj["urlencode"] = urlencode($char);
if ($char != rawurlencode($char))
$obj["rawurlencode"] = rawurlencode($char);
if (isset($obj["rawurlencode"]) || isset($obj["rawurlencode"]))
$encoded[] = $obj;
}
echo "var encoded = " . json_encode($encoded) . ";";
?>
console.table(encoded);
</script>
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.1 Stimmen
@nedshares Ich habe damit gespielt, aber soweit ich das beurteilen kann, scheint der Schlüssel nicht verschlüsselt zu sein... zumindest nicht auf die gleiche Art und Weise. Vielleicht ist es gegen die Spezifikation, ein = im Schlüssel zu haben?
3 Stimmen
Es ist auch erwähnenswert, dass neuere JavaScript-Implementierungen die Schnittstellen auf höherer Ebene bereitstellen URL et URLSearchParams zur Manipulation von URLs und deren Abfragezeichenfolgen.
0 Stimmen
EncodeURI ist für die Kodierung eines bereits erstellten Multi-Parameter-Strings (behandelt Leerzeichen, die in einer URL ungültig sind). encodeURIComponent kodiert einen einzelnen Parameterwert. Diese machen mehr. Aber das ist der erste Gedanke, den ich mir immer stelle.