JS读取PHP的没问题
JS读取JS的也没问题
PHP读取PHP也没问题
就PHP读取JS的有问题。
详细代码如下<!DOCTYPE script PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<?php
header("content-type:text/html; charset=utf-8");
//在PHP中设置COOKIE
setcookie("phpCookie","我是PHP产生的Cookie", time()+3600);
?>
<script language="javascript">
//JavaScript中设定Cookie值
function setCookie(name,value)
{
var Days = 1/1440; //此 cookie 将被保存 30 天
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//JS取JS保存的cookie
function getCookie2(name)
{ var temp = name + "=";
var tempLen = temp.length;
var cookieLen = document.cookie.length;
var i = 0;
while (i < cookieLen) {
var j = i + tempLen;
if (document.cookie.substring(i, j) == temp) {
return getCookieVal(j);
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
//辅助
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) {
endstr = document.cookie.length;
}
return unescape(document.cookie.substring(offset, endstr));
}
//js取PHP保存的Cookie值
function getCookie(sName)
{
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++){
var aCrumb = aCookie[i].split("="); if (encodeURIComponent(sName) == aCrumb[0])
return decodeURIComponent(aCrumb[1]);
}
return null;
}</script>
<script>
//显示经过解码的PHP设置的COOKIE
alert(getCookie("phpCookie"));
//使用JavaScript设置COOKIE值
setCookie("jsCookie","我是JavaScript产生的Cookie");
alert(getCookie2("jsCookie"));
</script>
<?php //显示JavaScript设置的COOKIE的
if (isset($_COOKIE["jsCookie"]))
echo urldecode($_COOKIE["jsCookie"]);
echo "<br />";
echo $_COOKIE["phpCookie"];
?>
</body></html>
第一次运行跳错。第二次因为写如cookie了没事
最后PHP读取JS产生的COOKIE
结果如下
%u6211%u662FJavaScript%u4EA7%u751F%u7684Cookie
我是PHP产生的Cookie 编码都采用UTF-8这些没什么问题。
JS读取JS的也没问题
PHP读取PHP也没问题
就PHP读取JS的有问题。
详细代码如下<!DOCTYPE script PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<?php
header("content-type:text/html; charset=utf-8");
//在PHP中设置COOKIE
setcookie("phpCookie","我是PHP产生的Cookie", time()+3600);
?>
<script language="javascript">
//JavaScript中设定Cookie值
function setCookie(name,value)
{
var Days = 1/1440; //此 cookie 将被保存 30 天
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//JS取JS保存的cookie
function getCookie2(name)
{ var temp = name + "=";
var tempLen = temp.length;
var cookieLen = document.cookie.length;
var i = 0;
while (i < cookieLen) {
var j = i + tempLen;
if (document.cookie.substring(i, j) == temp) {
return getCookieVal(j);
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
//辅助
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1) {
endstr = document.cookie.length;
}
return unescape(document.cookie.substring(offset, endstr));
}
//js取PHP保存的Cookie值
function getCookie(sName)
{
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++){
var aCrumb = aCookie[i].split("="); if (encodeURIComponent(sName) == aCrumb[0])
return decodeURIComponent(aCrumb[1]);
}
return null;
}</script>
<script>
//显示经过解码的PHP设置的COOKIE
alert(getCookie("phpCookie"));
//使用JavaScript设置COOKIE值
setCookie("jsCookie","我是JavaScript产生的Cookie");
alert(getCookie2("jsCookie"));
</script>
<?php //显示JavaScript设置的COOKIE的
if (isset($_COOKIE["jsCookie"]))
echo urldecode($_COOKIE["jsCookie"]);
echo "<br />";
echo $_COOKIE["phpCookie"];
?>
</body></html>
第一次运行跳错。第二次因为写如cookie了没事
最后PHP读取JS产生的COOKIE
结果如下
%u6211%u662FJavaScript%u4EA7%u751F%u7684Cookie
我是PHP产生的Cookie 编码都采用UTF-8这些没什么问题。
确实可以对这些编码可以转换,但只转了第一个。
我是JavaScript%u4EA7%u751F%u7684Cookie
中间的几个字没有转换。。
(适用于gbk/gb2312编码的)function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(%u.{4})/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u" && strlen($v) == 6)
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
}
return str_replace($r[0],$ar,$str);
}
$str = '%u6211%u662FJavaScript%u4EA7%u751F%u7684Cookie';
echo unescape($str);输出:我是JavaScript产生的Cookie
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(%u.{4})/",$str,$r);
$ar = $r[0];
$table_change = array();
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u" && strlen($v) == 6)
{
$ar[$k] = iconv("UCS-2","utf-8",pack("H4",substr($v,-4))); $table_change = array($v=>$ar[$k]); }
$str =strtr($str,$table_change);
}
//echo $str;
return $str;
}