快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

巴黎人app游戏登录:客户端Cookie中文编程



在Cookie的应用中,我们发明这样一个问题:假如写入Cookie的内容是中文(如用户称呼),用办事器端法度榜样(如ASP

或PHP)读出完全精确,然则用一样平常的JavaScript或VBScript的读Cookie函数掏出的却是一堆乱码。这是一个棘手的问题,

由于在有些环境下,Cookie的内容必要在客户机端用脚本说话读取。假如你写入了中文,获得了一堆乱码,是不是感到很

别扭呢?办理这个问题,还要从Cookie的存取要领提及。

我们知道,写入Cookie内容前必要进行escape(十六进制编码),编码时又因此字节为单位的,这便是问题的关键所

在:任何一个汉字都邑被拆成两个字节分手编码;而在读Cookie时,unescape又以字节单位解码,是以着末每个汉字都变

成了两个字节的乱码。怎么办呢?ASP或PHP要领能够精确读出,应该是在unescape解码后,又按照unicode编码把此中的汉

字拼了出来。假如这样的话,能不能找到一种变通的措施办理这个问题呢?仔细钻研后发明,只要在十六进制codec(编解

码)历程中能够保存汉字信息就行了,因而我们必要再外包一层codec历程,规划如下:

1.在escape编码前,把Cookie字符串中的每个字符转换为unicode码的字符串形式(用一特殊字符作为字串的分隔

符)。

2.在unescape解码后,先把所有unicode字串提掏出来,再用对应的函数转换为原字符。

=0;i--)

{

strRtn+=str.charCodeAt(i);

if (i) strRtn+="a"; //用a作分隔符

}

return strRtn;

}

//解码法度榜样:

function DecodeCookie(str)

{

var strArr;

var strRtn="";

strArr=str.split("a");

for (var i=strArr.length-1;i>=0;i--)

strRtn+=String.fromCharCode(eval(strArr[i]));

return strRtn;

}

//-->

VBScript版法度榜样如下:

1) then strRtn = strRtn & "a" "用a作分隔符

next

CodeCookie=strRtn

end function

"解码法度榜样:

function DecodeCookie(str)

Dim i

Dim strArr,strRtn

strArr=Split(str,"a");

for i=UBound(strArr)-LBound(strArr) to 1 step -1

strRtn=strRtn & chrw(Val(strArr(i)))

next

DecodeCookie=strRtn

end function

-->

例如你要写入的Cookie内容是"一顶abc",颠末CodeCookie变为"99a98a97a-31029a26432a"(基于安然斟酌,将

字符串反转),再颠末escape编码后变为"99a98a97a%2D31029a26432a"(escape编码将除字母和数字以外的字符转换为十

六进制%XX的形式),留意分隔符不能选%,D和数字。当然,假如有类似密码巴黎人app游戏登录的紧张信息,还必要在加密上再强化一下。因

为写入Cookie的一样平常都是短信息,编码后增添的一些字节可轻忽不计。下面的JavaScript读写Cookie函数中就加入了以上

的中文支持。

function SetCookie(name,value,expires)

{

var exp=new Date();

exp.setTime(exp.getTime()+expires*60*1000);

document.c巴黎人app游戏登录ookie=name+"="+escape(CodeCookie(value))+" ; expires="+e巴黎人app游戏登录xp.toGMTString()+" ; path=/";

}

function GetCookie (name)

{

var strArg=nam巴黎人app游戏登录e+"=";

var nArgLen=strArg.length;

var nCookieLen=document.cookie.length;

var nEnd;

var i=0;

var j;

while (i

{

j=i+nArgLen;

if (document.cookie.substring(i,j)==strArg)

{

nEnd=document.cookie.indexOf (";",j);

if (nEnd==-1) nEnd=document.cookie.length;

return DecodeCookie(unescape(document.cookie.substring(j,nEn巴黎人app游戏登录d)));

}

i=document.cookie.indexOf(" ",i)+1;

if (i==0) break;

}

return null;

}

假如用CGI法度榜样写入中文Cookie,客户端读取。如在ASP里,可以先应用前述的编码函数后,再用response写入,例

如:response.cookies("Name")=CodeCookie("张三")至此,中文Cookie的问题基础办理。若有相关问题,请到

www.coolbel.com/saibai交流。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: