php escape 编码问题

来源:互联网 发布:打开软件必备组件 编辑:程序博客网 时间:2024/06/06 00:33

http://bbs.csdn.net/topics/190029120


楼主 发表于: 2007-10-06 18:26:01
比如URL发送一个get数据,如 
aa.php?str=%20%B1%E0%C2%EB%CE%CA%CC%E2 
在get回来之后 
php是不会解码为中文的 
请问如何把他解码为中文呢 
还有js中的escape是否和php中有urlencode一样(应该不一样我试过了) 
如何做到编码一致 
另外,utf-8的js(escape)编码和gb2312的一样(我没调试过,好像不一样),我一开始是用gb2312后来改为utf-8因为数据库也用utf-8 
在这里万分的感谢
例如
XML/HTML code?
1
2
3
4
<script>document.write(escape('中国'));</script>
<br />
<? echo(urlencode('中国')); ?><br />
<? echo(urldecode('%u4E2D%u56FD')); ?>

输出的结果不一样
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
回复次数:10
#1 得分:0回复于: 2007-10-07 10:36:26
顶上去
怎么没人知道呢
解决方法呢
文思海辉第一届在线编程大赛
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#2 得分:5回复于: 2007-10-07 11:04:05
还有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);
}
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#3 得分:0回复于: 2007-10-07 21:17:32
解码呢?
unescape有没有?
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#4 得分:5回复于: 2007-10-08 11:24:02
我再送你一个,把下面作为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;
}
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#5 得分:10回复于: 2007-10-10 13:06:30
<?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
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#6 得分:0回复于: 2007-10-10 13:17:26
建议使用utf8编码, 然后使用javascript的encodeURIComponent函数
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#7 得分:0回复于: 2007-10-10 13:24:30
如果实在要用gb2312的话,也是使用encodeURIComponent, 这个函数会把js里边gb2312的内容转成utf8,然后urlencode编码,在php里边 urldecode以后 mb_convert_encoding转成gb2312就可以了
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#8 得分:0回复于: 2008-06-16 13:29:41
|||
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#9 得分:0回复于: 2008-06-16 13:30:21
||
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
#10 得分:0回复于: 2008-07-18 11:23:37
根本不一样两个函数的功能

0 0