Mit Javascript möchte ich einen Link zu einer Seite generieren. Die Parameter für die Seite befinden sich in einem Javascript-Array, das ich in JSON serialisiere.
Also möchte ich eine URL wie diese generieren:
http://example.com/?data="MY_JSON_ARRAY_HERE"
Wie muss ich meine JSON-Zeichenfolge (Array serialisiert) maskieren, um sie als Parameter in eine URL aufzunehmen?
Wenn es eine Lösung mit JQuery gibt, würde ich es lieben.
Hinweis: Ja, die Parameter für die Seite müssen sich in einem Array befinden, da es viele davon gibt. Ich denke, ich werde bit.ly verwenden, um die Links danach zu kürzen.
Antworten:
quelle
{["
). Gibt es eine Möglichkeit, nur die erforderlichen Zeichen zu codieren, damit ich meine URLs verkürzen kann?Sie können die
encodeURIComponent
sichere URL-Codierung von Teilen einer Abfragezeichenfolge verwenden:oder wenn Sie dies als AJAX-Anfrage senden:
quelle
Ich wollte das Gleiche tun. Problem für mich war, dass meine URL viel zu lang wurde. Ich habe heute eine Lösung mit der Bibliothek jsUrl.js von Bruno Jouhier gefunden .
Ich habe es noch nicht sehr gründlich getestet. Hier ist jedoch ein Beispiel, das die Zeichenlängen der Zeichenfolgenausgabe zeigt, nachdem dasselbe große Objekt mit drei verschiedenen Methoden codiert wurde:
jQuery.param
JSON.stringify + encodeURIComponent
JSURL.stringify
JSURL hat eindeutig das am besten optimierte Format für die URL-Codierung eines js-Objekts.
Der Thread unter https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q zeigt Benchmarks für das Codieren und Parsen.
Hinweis : Nach dem Testen sieht es so aus, als ob die Bibliothek jsurl.js ECMAScript 5-Funktionen wie Object.keys, Array.map und Array.filter verwendet. Daher funktioniert es nur in modernen Browsern (Nr. 8 und darunter). Es gibt jedoch Polyfills für diese Funktionen, die es mit mehr Browsern kompatibel machen würden.
quelle
Verwenden von
encodeURIComponent()
:quelle
Ich werde eine seltsame Alternative anbieten. Manchmal ist es einfacher, unterschiedliche Codierungen zu verwenden, insbesondere wenn Sie mit einer Vielzahl von Systemen arbeiten, die nicht alle Details der URL-Codierung auf dieselbe Weise verarbeiten. Dies ist nicht der gängigste Ansatz, kann jedoch in bestimmten Situationen nützlich sein.
Anstatt die Daten per URL zu codieren, können Sie sie mit base64 codieren. Dies hat den Vorteil, dass die codierten Daten sehr allgemein sind und nur aus Alpha-Zeichen und manchmal nachgestellten Zeichen bestehen
=
. Beispiel:JSON-Array von Zeichenfolgen:
Diese Daten, URL-codiert als
data
Parameter:Gleiche, base64-codierte:
Der base64-Ansatz kann etwas kürzer sein, ist aber vor allem einfacher. Ich habe häufig Probleme beim Verschieben von URL-codierten Daten zwischen cURL, Webbrowsern und anderen Clients, normalerweise aufgrund von Anführungszeichen, eingebetteten
%
Zeichen usw. Base64 ist sehr neutral, da keine Sonderzeichen verwendet werden.quelle
/
mit$
,_
oder andere Zeichen , das erfordert keine URL - Codierung gemäß RFC 3986.Die Antwort von Delan ist perfekt. Nur hinzufügen - falls jemand die Parameter benennen oder mehrere JSON-Zeichenfolgen separat übergeben möchte - könnte der folgende Code helfen!
JQuery
PHP
Hoffe das hilft!
quelle