jQuery:JSON.stringify在保存cookie后更改了我的对象值

时间:2012-12-01 15:05:34

标签: javascript jquery json stringify

  

可能重复:
  Allowed characters in cookies

我正在使用JSON.stringify转换对象以将其保存在Cookie中。但是在将cookie中保存阿拉伯语Windows-1256编码后,我无法恢复它。这是我做的:

例如:

转换并保存在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”

这是我的cookie的结果

  

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中保存包含阿拉伯语的对象并将其还原?

1 个答案:

答案 0 :(得分:2)

您应该使用escapeencodeURIComponent(两者之间的微小差异,见下文)对进入Cookie的字符串进行处理,然后通过unescapedecodeURICompontent进行反转。检索数据。

// 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,因为它会减少互联网使用量。