Javascriptを使用して、ページへのリンクを生成します。ページへのパラメーターは、JSONでシリアル化するJavascript配列にあります。
だから私はそのようなURLを生成したいと思います:
http://example.com/?data="MY_JSON_ARRAY_HERE"
RLにパラメーターとして含めるためにJSONストリングをエスケープする(配列をシリアル化する)必要がありますか?
JQueryを使用したソリューションがある場合、私はそれが大好きです。
注:はい。ページのパラメーターは多数あるため、配列に含める必要があります。後でリンクを短くするためにbit.lyを使用すると思います。
encodeURIComponent(JSON.stringify(object_to_be_serialised))
私も同じことをしようとしていました。私の問題は、私のURLが長すぎたためです。今日 Bruno JouhierのjsUrl.jsライブラリ を使用して解決策を見つけました。
まだ十分にテストしていません。ただし、3つの異なる方法を使用して同じラージオブジェクトをエンコードした後の文字列出力の文字長を示す例を次に示します。
jQuery.param
を使用した2651文字JSON.stringify + encodeURIComponent
を使用した1691文字JSURL.stringify
を使用した821文字jSURLには、jsオブジェクトをurlEncodingするための最も最適化された形式があります。
https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q のスレッドは、エンコードと解析のベンチマークを示しています。
注:テスト後、jsurl.jsライブラリはObject.keys、Array.map、Array.filterなどのECMAScript 5関数を使用しているようです。したがって、最新のブラウザー(つまり8以下)でのみ動作します。ただし、これらの関数のポリフィルは、より多くのブラウザーとの互換性を確保します。
encodeURIComponent
を使用して、クエリ文字列の一部を安全にURLエンコードできます。
var array = JSON.stringify([ 'foo', 'bar' ]);
var url = 'http://example.com/?data=' + encodeURIComponent(array);
または、これをAJAXリクエストとして送信する場合:
var array = JSON.stringify([ 'foo', 'bar' ]);
$.ajax({
url: 'http://example.com/',
type: 'GET',
data: { data: array },
success: function(result) {
// process the results
}
});
encodeURIComponent()
の使用:
var url = 'index.php?data='+encodeURIComponent(JSON.stringify({"json":[{"j":"son"}]})),
奇妙な代替手段を提供します。異なるエンコーディングを使用する方が簡単な場合があります。特に、URLエンコーディングの詳細をすべて同じ方法で処理しないさまざまなシステムを扱う場合はなおさらです。これは最も主流のアプローチではありませんが、特定の状況で役立つ場合があります。
データをURLエンコードするのではなく、base64エンコードできます。これの利点は、エンコードされたデータが非常に汎用的であり、アルファ文字のみで構成され、末尾に=
が含まれることがあることです。例:
JSONの文字列配列:
["option", "Fred's dog", "Bill & Trudy", "param=3"]
data
paramとしてURLエンコードされたそのデータ:
"data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
同じ、base64エンコード:
"data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"
Base64のアプローチは少し短くすることができますが、さらに重要なことは、よりシンプルです。通常、引用符、埋め込まれた%
記号などが原因で、cURL、Webブラウザー、および他のクライアント間でURLエンコードされたデータを移動する際に問題が発生することがよくあります。 Base64は特殊文字を使用しないため、非常に中立的です。
Delanの回答は完璧です。追加するだけです-誰かがパラメーターに名前を付けたり、複数のJSON文字列を個別に渡したい場合に備えて、以下のコードが役立ちます!
JQuery
var valuesToPass = new Array(encodeURIComponent(VALUE_1), encodeURIComponent(VALUE_2), encodeURIComponent(VALUE_3), encodeURIComponent(VALUE_4));
data = {elements:JSON.stringify(valuesToPass)}
PHP
json_decode(urldecode($_POST('elements')));
お役に立てれば!