社区
基础编程
帖子详情
在PHP里存入COOKIE中的中文内容,JS里取出来是乱码,该如何处理?
lingye
2006-03-10 10:36:17
都是UTF-8编码的
...全文
1035
3
打赏
收藏
在PHP里存入COOKIE中的中文内容,JS里取出来是乱码,该如何处理?
都是UTF-8编码的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Gdj
2006-03-29
打赏
举报
回复
cookie 中值的部分在发送的时候会被自动用 urlencode 编码并在接收到的时候被自动解码并把值赋给与自己同名的 cookie 变量。如果不想这样并且在使用 PHP 5 的话,可以用 setrawcookie() 来代替。
ieooo
2006-03-29
打赏
举报
回复
///////////////////////////////////////////////////////////////////
以下是从“http://www.yesky.com”摘录过来的一篇文章,具体出处:http://www.yesky.com/20001128/139005.shtml,作者是谁不知道
里面很详细地叙述了处理“中文乱码”的方法。
//////////////////////////////////////////////////////////////////
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字串提取出来,再用对应的函数转换为原字符。
$#@60;SCRIPT LANGUAGE=javascript$#@62;
$#@60;!--
//编码程序:
function CodeCookie(str)
{
var strRtn="";
for (var i=str.length-1;i$#@62;=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$#@62;=0;i--)
strRtn+=String.fromCharCode(eval(strArr[i]));
return strRtn;
}
//--$#@62;
$#@60;/script$#@62;
VBScript版程序如下:
$#@60;SCRIPT LANGUAGE=vbscript$#@62;
$#@60;!--
"编码程序:
function CodeCookie(str)
Dim i
Dim strRtn
for i=len(str) to 1 step -1
strRtn=strRtn & ascw(mid(str,i,1))
if (i$#@60;$#@62;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
--$#@62;
$#@60;/script$#@62;
例如你要写入的Cookie内容是"一顶abc",经过CodeCookie变为"99a98a97a-31029a26432a"(基于安全考虑,将字符串反转),再经过escape编码后变为"99a98a97a%2D31029a26432a"(escape编码将除字母和数字以外的字符转换为十六进制%XX的形式),注意分隔符不能选%,D和数字。当然,如果有类似密码的重要信息,还需要在加密上再强化一下。因为写入Cookie的一般都是短信息,编码后增加的一些字节可忽略不计。下面的JavaScript读写Cookie函数中就加入了以上的中文支持。
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$#@60;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;
}
如果用CGI程序写入中文Cookie,客户端读取。如在ASP里,可以先使用前述的编码函数后,再用response写入,例如:response.cookies("Name")=CodeCookie("张三")至此,中文Cookie的问题基本解决。若有相关问题,请到www.coolbel.com/saibai交流。
faisun
2006-03-11
打赏
举报
回复
遇到过...
我是这样解决的:
PHP 用 escape 加密,到客户端再用 unescape 解密.
xuzuning(唠叨) 的 BLOG 有 PHP 的 escape 函数:
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);
}
130+节【合集】python爬虫进阶实战项目案例
案例3:爬取芒果TB弹幕
内容
存入
Excel表格。 案例4:爬取豆瓣电影信息TXT文档。 案例5:爬取简书图片保存到本地。 案例6:爬取携程景点评论
存入
Excel表格。 案例7:爬取全国列车班次信息
存入
Excel表格。 案例8:自动...
PHP
存储汉字
cookie
值
乱码
,
处理
php
cookie
乱码
的问题_后端开发
php
cookie
乱码
的
处理
办法:起首翻开响应...
PHP
猎取
COOKIE
值与
中
文
乱码
处理
要领
php
中
猎取
cookie
值异常的简朴只需
COOKIE
[]
中
心是
cookie
id名就能够猎取到了,下面来简朴的给人人引见下
php
中
cookie
的一个运用例子。...
php
后台存
cookie
前台
js
中
文
读取
cookie
的办法
后台 set
cookie
("real_name", $user, time()+600);set
cookie
("status", $status, time()+600);... var arr = document.
cookie
.match(new RegExp("(^| )" + name + "=([^;]...
Think
php
字符串操作/
cookie
字符串
乱码
问题/
cookie
操作
Think
php
中
常用的字符串操作 截取字符串 substr() 截取
中
文
字符串 mb_substr() 否则会出现
乱码
用substr()截取
中
文
会出现这种东西��� JFIF��C��C���� mb_substr($str, $start, $length, $encoding) 要...
php
mysql插入的数据有引号,
PHP
引号转义
中
解决POST,GET,Mysql数据自动转义问题
在
处理
mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。
PHP
中
有三个设置可以实现自动对’(单引号),”(双引号),\(反斜线)和 NULL 字符转转。
PHP
称之为魔术引号,这三项设置分别是magic_quotes_gpc影响...
基础编程
21,886
社区成员
140,365
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章