2

重複の可能性:
Cookie で許可されている文字

JSON.stringifyオブジェクトを変換してCookieに保存するために使用しています。しかし、アラビア語の Windows-1256 エンコーディングを Cookie に保存した後、それを復元できませんでした。これが私がしたことです:

例えば:

変換して Cookie に保存します。

conv[user]   = {"user":1,"u":1,"m":3,"c":255,"comment":'السلام عليكم ورحمه الله'};
addCookie('chat_conversations', JSON.stringify(conv) , 7);

Cookie から値を復元します。

var con  = is_cookie('chat_conversations');
conv = jQuery.parseJSON(con);

JSON結果を取得する:

alert(conv[1].comment);

結果

"'D3D'E 9DJCE H1-EG 'DDG H(1C'*G\n"

これが私のクッキーの結果です

chat_conversations={"1":{"user":"1","u":"1","m":3,"c":255,"comment":"'D3D'E 9DJCE H1-EG ' DDG H(1C'*G\n"}}; expires=Sat, 08 Dec 2012 15:00:42 GMT; path=/; domain=127.0.0.1

アラビア語を含むオブジェクトを Cookie に保存して復元するにはどうすればよいですか?

4

1 に答える 1

2

escapeorを使用して Cookie に入る文字列をサナタイズしencodeURIComponent(2 つの間の小さな違い、以下を参照) 、データを取得するときにunescapeorを介してこれを逆にする必要があります。decodeURICompontent

// Create obj using safe chars only
conv[user] = {
    "user" : 1, // (numbers are fine as they are)
    "u" : 1,
    "m" : 3,
    "c" : 255,
    "comment" : escape('السلام عليكم ورحمه الله') // by escaping potentially unsafe chars
};
// save
addCookie('chat_conversations', JSON.stringify(conv) , 7);
// retrieve
var con  = is_cookie('chat_conversations');
conv = jQuery.parseJSON(con);

var comment = unescape(conv[1].comment); // unescape what was escaped earlier
alert(comment);
// "السلام عليكم ورحمه الله"

escapeこのデータを JavaScript で使用したいだけなので、問題ありません。Cookie サーバー側にアクセスする場合は、 を使用することを強くお勧めしencodeURIComponentます。

JavaScript だけで使用している場合は、window.localStorageインターネットの使用量が少なくなるので検討してください。

于 2012-12-01T15:29:23.230 に答える