Chinaunix

标题: 求教,utf-8编码PHP文件设置中文cookie,客户端js读取乱码的问题? [打印本页]

作者: flytod    时间: 2006-04-21 12:54
标题: 求教,utf-8编码PHP文件设置中文cookie,客户端js读取乱码的问题?
所有的PHP文件和字符全部是utf-8编码的,整个网页也是utf-8编码的。
在PHP端执行setcookie('u','中文');
在客户端maxthon查看cookie信息,u=%E4%B8%AD%E6%96%87,其正好是‘中文’的utf-8编码。

这时我想在浏览器的html代码中,将cookie读出来,利用 somedom.innerHTML=这个值。
但在js中,无论怎么编码,出来的都是乱码。

使用phpinfo()来查看,

$_COOKIE['u'] 是 中文
$_SERVER["HTTP_COOKIE"] 是 u=?%E4%B8%AD%E6%96%87

前一个 $_COOKIE['u']怎么自动转码了?这点一直没有想明白?
作者: tonera    时间: 2006-04-21 16:07
输出页面信息前用header指定编码试试.
作者: _kernel    时间: 2006-04-21 19:44
js是unicode编码
作者: muyan    时间: 2006-04-24 14:30
只有vbs的,有人改写成js的记得发给我一份

  1. <script language=vbs>  
  2. function urldecoding(vstrin)   
  3.         dim  i,strreturn,strSpecial  
  4.         strSpecial = "!""#$%&'()*+,/:;<=>?@[\]^`{  |}~%"  
  5.         strreturn = ""  
  6.         for i = 1 to len(vstrin)              
  7.                 thischr = mid(vstrin,i,1)  
  8.                 if thischr="%" then
  9.                         intasc=eval("&h"+mid(vstrin,i+1,2))  
  10.                         if  instr(strSpecial,chr(intasc))>0  then  
  11.                                 strreturn=  strreturn  &  chr(intasc)  
  12.                                 i=i+2  
  13.                         else  
  14.                                 intasc=eval("&h"+mid(vstrin,i+1,2)+mid(vstrin,i+4,2))  
  15.                                 strreturn=  strreturn  &  chr(intasc)  
  16.                                 i=i+5  
  17.                         end if  
  18.                 else  
  19.                         if thischr="+" then  
  20.                                 strreturn = strreturn & "  "  
  21.                         else  
  22.                                 strreturn = strreturn & thischr  
  23.                         end if  
  24.                 end if  
  25.         next  
  26.         urldecoding = strreturn  
  27. end function
  28. </script>
复制代码

作者: xuzuning    时间: 2006-04-24 17:01
somedom.innerHTML = decodeURIComponent("%E4%B8%AD%E6%96%87");

setcookie函数会对cookie变量的值做一次urlencode操作
因为你恰好使用了utf-8编码,所以操作起来就很方便了。如果是其他编码,比如gb2312就需要就需要自己书写编码函数了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2