快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

客户端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字串提取出来,再用对应的函数转变为原字符。

<SCRIPT LANGUAGE=javascript>
<!--
//编码程序:
function CodeCookie(str)
{
 var strRtn="";

 for (var i=str.length-1;i>=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;
}
//-->
</script>


VBScript版程序如下:

<SCRIPT LANGUAGE=vbscript>
<!--
"编码程序:
function CodeCookie(str)
Dim i
Dim strRtn

for i=len(str) to 1 step -1
strRtn=strRtn & ascw(mid(str,i,1))
if (i<>1) then strRtn trRtn & "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
-->
</script>
返回类别: 教程
上一教程: 将身份证从15位升级为18位的函数
下一教程: RESPONSE对象4

您可以阅读与"客户端COOKIE中文编程(上)"相关的教程:
· 客户端COOKIE中文编程(下)
· XMLHTTP GET HTML页面时的中文乱码之完全客户端SCRIPT解决方案
· 关于ADODB.STREAM的写数据库数据到客户端
· 浅谈ASP中REQUEST对象获取客户端数据的顺序
· 关于ADODB.STREAM的写数据库数据到客户端文件的实践
    微笑服务 优质保证 索取样品