Speicherung einer Liste von Schlüssel-Wert-Paare in einem url-parameter, javascript.
Vorausgesetzt www.mydomain.com?param1=example
als Beispiel.
Was ist der beste Weg, um einen zweiten parameter, der eine Liste von Schlüssel-Wert-Paare? An der minute, die ich verwenden ¶m2=key|value,key|value
. Ich trenne den Schlüssel aus dem Wert über eine vertikale Linie, und die Kopplung mit einem Komma, alles nach dem Gleichheitszeichen ist codiert encodeURIComponent()
. Dies funktioniert sehr gut.
Jedoch, der Benutzer hat die Kontrolle über den Wert... Und als vernünftige menschliche Wesen, die wir alle wissen, dass das erste, was der Benutzer wahrscheinlich ist Stock eine vertikale Leiste oder ein Komma als einer der Werte brechen meine parameter parser. Gibt es einen besseren Weg, dies zu tun? Ich habe gesehen, PHP-Nutzer sprechen über die Speicherung assoziative arrays, die in urls aber ich bin auf der Suche nach einem Reine javascript-Lösung.
- Sie wissen, Sie können mit arrays und GET-Parametern: webmasterworld.com/forum88/5808.htm
Du musst angemeldet sein, um einen Kommentar abzugeben.
PHP (und anderen serverseitigen Sprachen) unterstützen die übergabe von arrays in der Abfrage-string.
PHP geparst werden den GET-string wie folgt:
Wenn Sie don ' T-pass-Tasten, es wird ein numerisches array:
Wird analysiert werden, wie:
UPDATE: Sie können auch parse den query-string in JavaScript.
Hier ist eine einfache jQuery-plugin, das ich gemacht:
Dann können Sie tun:
$.parseQuery('param1=example¶m2[]=value1¶m2[]=value2');
.window.location.search
enthält der get-string. Sie können dann analysieren und es in JavaScript. Sie können diese Methode verwenden, ich schrieb: gist.github.com/3528917 🙂 (Hinweis:window.location.search
enthält die?
Sie müssen Sie nennen mag:$.parseQuery(window.location.search.substring(1))
).Eine mögliche Lösung wäre, die Flucht der Rohr-und Kommas in der Eingabe des Benutzers, bevor wir Sie zu Ihrer url.
Dass bedeutet Reinigung des Benutzer-Eingabe-Werte und ersetzen
|
und,
mit etwas, das nicht zu brechen, Ihren code oder nur Strippen Sie Sie ganz.Um zu verhindern, dass casual-Manipulation, könnte man hinzufügen, eine Prüfsumme und base-64-codierte Werte dann alsterrunde() der resultierende string. (Siehe Wie können Sie Kodieren in Base64 mit Javascript? und Eine JavaScript-CRC32.)
Natürlich, dies wird nicht verhindern, dass jemand, der wirklich entschlossen aus messing mit Ihren Werten, aber es wird sich verlangsamen Leute, die einfach gerne twiddle-URLs.
Wenn ich daran denke, serialisieren einer Liste von Schlüssel-Wert-Paaren, ich denke da sofort an mit einem query-string.
Für Grundlagen (JSON verwendet, um zu zeigen, Deserialisierung):
ist im wesentlichen:
Aber Sonderzeichen müssen escaped werden:
ist im wesentlichen:
Was dies bedeutet ist, dass Sie passieren kann einen query-string als Wert in einem anderen query-string:
ist im wesentlichen:
Sowie
foo
kann analysiert werden, um zu produzieren:Alle gesagt, es ist sehr einfach, Fehler zu machen bei der Codierung/Decodierung, und sobald Sie beginnen, Doppel-Codierung und Doppel-Dekodierung, die Sie sicher sind, laufen in Probleme. Wenn Sie können, verwenden Sie einen einzelnen query-string enthalten alle notwendigen Daten, und nicht die Einbettung eines query-string in eine Abfrage-string.