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这些没什么问题。

解决方案 »

  1.   

    js的escape() 与 php的urldecode() 不是一组互逆的函数给你一个xuzuning大大的php实现另外js写的cookie只有下次请求php时,才会带上该cookie信息,因为服务端先执行,js客户端后执行带着上次设置的cookie请求php -> php 获取cookie -> php返回内容(设置cookie) -> js执行 -> js 设置cookie -> 重复开头
      

  2.   


    确实可以对这些编码可以转换,但只转了第一个。
    我是JavaScript%u4EA7%u751F%u7684Cookie
    中间的几个字没有转换。。
      

  3.   

    把徐老大的函数略做修改就可以了
    (适用于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
      

  4.   

    如果是utf-8编码 则用这个:$ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
      

  5.   

    结贴了。下面这个是我改的。中英转回来的。
    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;
    }
      

  6.   

    感谢life169。刚自己改的时候没看到。我刚接触PHP,对函数不是很了解。你的方法比我简单多了。效率也高多了。