CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟





 
标题: [转贴] javascript读cookie编码的小问题
mz89757053
版主
Rank: 7Rank: 7Rank: 7


UID 304999
精华 0
积分 6933
帖子 8295
威望 116
ZD币 1002 元
阅读权限 250
注册 2008-3-10
状态 离线
  楼主
发表于 2008-3-18 11:14  资料  个人空间  短消息  加为好友 
开发者在线

javascript读cookie编码的小问题

设置cookie的方式是这样的   
  function       escape($str)       {         
              preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);         
              $ar       =       $r[0];         
              foreach($ar       as       $k=>$v)       {         
                      if(ord($v[0])       <       128)         
                              $ar[$k]       =       rawurlencode($v);         
                      else         
                              $ar[$k]       =       "%u".bin2hex(iconv("GB2312","UCS-2",$v));         
              }         
              return       join("",$ar);         
      }     
  $username=escape($rows["username"]);   
  setcookie("_user",   $username,   time()+8640000,$cookiepath,   $cookiedomain);   
   
  读取cookie是按这个方式读取的   
  function   getCookieVal(offset)   {   
  var   endstr   =   document.cookie.indexOf(";",   offset);   
  if   (endstr   ==   -1)   
  endstr   =   document.cookie.length;   
  return   decodeURIComponent(document.cookie.substring(offset,   endstr));   
  }   
  function   getCookie(name)   {   
  var   arg   =   name   +   "=";   
  var   alen   =   arg.length;   
  var   clen   =   document.cookie.length;   
  var   i   =   0;   
  while   (i   <   clen){   
  var   j   =   i   +   alen;   
  if   (document.cookie.substring(i,   j)   ==   arg)   
  return   getCookieVal(j);   
  i   =   document.cookie.indexOf("   ",   i)   +   1;   
  if   (i   ==   0)   break;   
  }   
  return   "";   
  }   
   
  var   str   =   getCookie("_user")   ;   
  document.write(str);   
  但是出来的中文是乱码,高手指点一下




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
mz89757053
版主
Rank: 7Rank: 7Rank: 7


UID 304999
精华 0
积分 6933
帖子 8295
威望 116
ZD币 1002 元
阅读权限 250
注册 2008-3-10
状态 离线
  沙发
发表于 2008-3-18 11:14  资料  个人空间  短消息  加为好友 
最近也在研究   cookie   
  对此理解不是很深刻,不过在这两天的测试中,我发现cookie写入时候,有一个编码过程   
  例如“:”   会变成   "%3A"   
  中文应该也是如此。




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
mz89757053
版主
Rank: 7Rank: 7Rank: 7


UID 304999
精华 0
积分 6933
帖子 8295
威望 116
ZD币 1002 元
阅读权限 250
注册 2008-3-10
状态 离线
  板凳
发表于 2008-3-18 11:14  资料  个人空间  短消息  加为好友 
摘录一位前辈的一段:   
   
  写入Cookie内容前需要进行escape(十六进制编码),编码时又是以字节   为单位的,这就是问题的关键所在:任何一个汉字都会被拆成两个字节分别编码;而在读   Cookie时,unescape又以字节单位解码,因此最后每个汉字都变成了两个字节的乱码。   
  ASP或PHP方式能够正确读出,应该是在unescape解码后,又按照unicode编码把其   中的汉字拼了出来。如果这样的话,能不能找到一种变通的方法解决这个问题呢?仔细研   究后发现,只要在十六进制codec(编解码)过程中能够保存汉字信息就行了,因而我们需   要再外包一层codec过程。




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
mz89757053
版主
Rank: 7Rank: 7Rank: 7


UID 304999
精华 0
积分 6933
帖子 8295
威望 116
ZD币 1002 元
阅读权限 250
注册 2008-3-10
状态 离线
  地毯
发表于 2008-3-18 11:15  资料  个人空间  短消息  加为好友 
function   SetCookie(name,value,expires)   
  {   
   var   exp=new   Date();   
   exp.setTime(exp.getTime()+expires*60*1000);   
   document.cookie=name+"="+escape(CodeCookie(value))+"   ;     expires="+exp.toGMTString()+"   ;   path=/";   
  }   
   
  function   GetCookie   (name)     
  {   
   var   strArg=name+"=";   
   var   nArgLen=strArg.length;   
   var   nCookieLen=document.cookie.length;   
   var   nEnd;   
   var   i=0;   
   var   j;   
   
  while   (i<nCookieLen)     
  {   
   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,nEnd)));   
  }   
   i=document.cookie.indexOf("   ",i)+1;   
   if   (i==0)   break;   
  }   
   return   null;   
  }




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2009-7-5 01:32

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.058620 second(s), 3/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版