网上看到的都是 读写时用 unescape/escape 编码解码的,这样只是 js 间互用没有啥问题,但是和 php 交互时如果cookie值是中文就有问题了,就会碰到乱码。
为了解决这个问题,首先我们的环境全部是 utf-8 ,其次在 js 读写 cookie 时用 encodeURIComponent/decodeURIComponent 编码解码就可以了。下面是相关代码及例子
保存下面代码到 cookietest.php
<?php
setcookie('a','测试1')
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<p>js 和 php 共用 Cookie 测试,中文无乱码</p>
<script type="text/javascript">
function SetCookie(name,value,hours) {
var hours = hours || 0;
var d = new Date();
d.setTime(d.getTime() + hours*60*60*1000);
if (hours==0) {
document.cookie = name + "=" + encodeURIComponent(value) + ";";
} else {
document.cookie = name + "=" + encodeURIComponent(value) + ";expires=" + d.toGMTString();
}
return;
}
function GetCookie(name) {
re = new RegExp("(^| )" + name + "=([^;]*)(;|$)","i");
if (re.test(document.cookie)) {
return decodeURIComponent(RegExp.$2);
} else {
return null;
}
}
function DelCookie(name) {
var d = new Date();
d.setTime(d.getDate() - 1);
if (GetCookie(name)!=null) {
document.cookie = name + "=;expires=" + d.toGMTString();
}
return;
}
SetCookie('b','测试2');
SetCookie('c','测试3',0.5);
alert(GetCookie('a') + ' ' + GetCookie('b'));
//DelCookie('b');
</script>
<?php
echo $_COOKIE['a'];
echo $_COOKIE['b'];
?>
Last modified by vkill on2008/12/14 17:49
为了解决这个问题,首先我们的环境全部是 utf-8 ,其次在 js 读写 cookie 时用 encodeURIComponent/decodeURIComponent 编码解码就可以了。下面是相关代码及例子
保存下面代码到 cookietest.php
<?php
setcookie('a','测试1')
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<p>js 和 php 共用 Cookie 测试,中文无乱码</p>
<script type="text/javascript">
function SetCookie(name,value,hours) {
var hours = hours || 0;
var d = new Date();
d.setTime(d.getTime() + hours*60*60*1000);
if (hours==0) {
document.cookie = name + "=" + encodeURIComponent(value) + ";";
} else {
document.cookie = name + "=" + encodeURIComponent(value) + ";expires=" + d.toGMTString();
}
return;
}
function GetCookie(name) {
re = new RegExp("(^| )" + name + "=([^;]*)(;|$)","i");
if (re.test(document.cookie)) {
return decodeURIComponent(RegExp.$2);
} else {
return null;
}
}
function DelCookie(name) {
var d = new Date();
d.setTime(d.getDate() - 1);
if (GetCookie(name)!=null) {
document.cookie = name + "=;expires=" + d.toGMTString();
}
return;
}
SetCookie('b','测试2');
SetCookie('c','测试3',0.5);
alert(GetCookie('a') + ' ' + GetCookie('b'));
//DelCookie('b');
</script>
<?php
echo $_COOKIE['a'];
echo $_COOKIE['b'];
?>
Last modified by vkill on2008/12/14 17:49
网友评论(0):


