原文地址:http://www.maoyupeng.com/use-cookie-on-javascript.htmljavascript
使用js期间,若是存储的数据存在中文,则可能会遇到兼容性的问题.我先说说我遇到的问题(不要心急,在后面会提供完整的代码案例):html
在安卓
的手机上使用微信打开个人测试网页,存储中文没有问题,一切正常(不敢包因此安卓机,反正我当时用的的小米4是没有遇到有中文乱码的问题)java
在ios
的手机上使用微信打开个人测试网页,存储中文会出现诡异的问题,具体状况请看示例 ↓android
安卓手机ios
var setAndroidValue = { cityId: 197, cityName: '广州' } cookie.set('androidTestCookie',setAndroidValue,30); // 存储成功后,获取的值为,一切正常 console.log(JSON.stringify(cookie.get('androidTestCookie'))) //{cityId: 197,cityName: '广州'}
ios手机数组
var setAndroidValue = { cityId: 197, cityName: '广州' } cookie.set('androidTestCookie',setAndroidValue,30); // 存储成功后,获取的值缺乏了一截,我的估计就是由于遇到中文了,乱码,没有存储进去 console.log(JSON.stringify(cookie.get('androidTestCookie'))) //{cityId: 197,cityName: '
其实很简单,就是使用了escape()
和unescape()
函数微信
escape(string)
函数可对字符串进行编码,这样就能够在全部的计算机上读取该字符串。返回值:已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。cookie
unescape(string)
跟escape()
恰好相反,就是解码的函数
var cookie = { set:function(key,val,time){//设置cookie方法 var date=new Date(); //获取当前时间 var expiresDays=time; //将date设置为n天之后的时间 date.setTime(date.getTime()+expiresDays*24*3600*1000); //格式化为cookie识别的时间 document.cookie=key + "=" + escape(val) +";expires="+date.toGMTString(); //设置cookie }, get:function(key){//获取cookie方法 /*获取cookie参数*/ var getCookie = document.cookie.replace(/[ ]/g,""); //获取cookie,而且将得到的cookie格式化,去掉空格字符 var arrCookie = getCookie.split(";") //将得到的cookie以"分号"为标识 将cookie保存到arrCookie的数组中 var tips; //声明变量tips for(var i=0;i<arrCookie.length;i++){ //使用for循环查找cookie中的tips变量 var arr=arrCookie[i].split("="); //将单条cookie用"等号"为标识,将单条cookie保存为arr数组 if(key==arr[0]){ //匹配变量名称,其中arr[0]是指的cookie名称,若是该条变量为tips则执行判断语句中的赋值操做 tips=arr[1]; //将cookie的值赋给变量tips break; //终止for循环遍历 } } return unescape(tips); } }
cookie.set('key','value,中文也能够的',30) //30天后失效 cookie.get('key') // value,中文也能够的