还有js中的escape是否和php中有urlencode一样
-----------------------------------------
是不一样的。
送你一个转换函数。
-----------------------------------------
function escape($str) 
{
preg_match_all("/[\xc2-\xdf][\x80-\xbf]+|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}|[\x01-\x7f]+/e",$str,$r);
//匹配utf-8字符,
$str = $r[0];
$l = count($str);
for($i=0; $i<$l; $i++)
{
$value = ord($str[$i][0]);
if($value < 223)
{
$str[$i] = rawurlencode(utf8_decode($str[$i]));
//先将utf8编码转换为ISO-8859-1编码的单字节字符,urlencode单字节字符.
//utf8_decode()的作用相当于iconv("UTF-8","CP1252",$v)。
}
else
{
$str[$i] = "%u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
}
}
return join("",$str);
}

解决方案 »

  1.   

    我再送你一个,把下面作为php的一个函数,调用它就可以.编码为UTF-8
    //php js_unescape correspond to js escape
    function js_unescape($str)
    {
            $ret = '';
            $len = strlen($str);        for ($i = 0; $i < $len; $i++)
            {
                    if ($str[$i] == '%' && $str[$i+1] == 'u')
                    {
                            $val = hexdec(substr($str, $i+2, 4));                        if ($val < 0x7f) $ret .= chr($val);
                            else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                            else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));                        $i += 5;
                    }
                    else if ($str[$i] == '%')
                    {
                            $ret .= urldecode(substr($str, $i, 3));
                            $i += 2;
                    }
                    else $ret .= $str[$i];
            }
            return $ret;
    }
      

  2.   

    <?php
    /*
     *使用 PHP 解码 javascript escape() 编码过的字串为UTF-8
     *例:1
     *
     *$tem=new UnEscape();
     *echo $tem->getUtf8("%u624B%u673A%u95E8%u6237");
     *echo $tem->getGb2312("%u624B%u673A%u95E8%u6237");
     */
        function UnEscapeToUtf8($ar){
         foreach($ar as $val){
           $val = intval(substr($val,2),16);
           if($val < 0x7F){        // 0000-007F
              $c .= chr($val);
           }elseif($val < 0x800) { // 0080-0800
              $c .= chr(0xC0 | ($val / 64));
              $c .= chr(0x80 | ($val % 64));
           }else{                // 0800-FFFF
              $c .= chr(0xE0 | (($val / 64) / 64));
              $c .= chr(0x80 | (($val / 64) % 64));
              $c .= chr(0x80 | ($val % 64));
           }
         }
         return $c;
        } class UnEscape{
        function getUtf8($value=""){
          $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",UnEscapeToUtf8,$value);
          return urldecode($text);
        }    function getGb2312($value=""){
          $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",UnEscapeToUtf8,$value);
      $obj=new Gb2312Utf8();
          return $obj->utf8ToGb2312(urldecode($text));
        }
    }
    ?>
    方法getGb2312不能用,因为Gb2312Utf8太大这里没发
    如要完整的可到我的空间下载utf8gb2312互转集成GB2312.txt 这个资源
    http://download.csdn.net/user/li36669957
      

  3.   

    建议使用utf8编码, 然后使用javascript的encodeURIComponent函数
      

  4.   

    如果实在要用gb2312的话,也是使用encodeURIComponent, 这个函数会把js里边gb2312的内容转成utf8,然后urlencode编码,在php里边 urldecode以后 mb_convert_encoding转成gb2312就可以了