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 在这里万分的感谢 例如
输出的结果不一样 | ||
![]() |
#1 得分:0
回复于: 2007-10-07 10:36:26
顶上去
怎么没人知道呢 解决方法呢 |
|
![]() |
#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); } |
![]() |
#3 得分:0
回复于: 2007-10-07 21:17:32
解码呢?
unescape有没有? |
![]() |
#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; } |
![]() |
#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 |
![]() |
#6 得分:0
回复于: 2007-10-10 13:17:26
建议使用utf8编码, 然后使用javascript的encodeURIComponent函数
|
![]() |
#7 得分:0
回复于: 2007-10-10 13:24:30
如果实在要用gb2312的话,也是使用encodeURIComponent, 这个函数会把js里边gb2312的内容转成utf8,然后urlencode编码,在php里边 urldecode以后 mb_convert_encoding转成gb2312就可以了
|
![]() |
#8 得分:0
回复于: 2008-06-16 13:29:41
|||
|
![]() |
#9 得分:0
回复于: 2008-06-16 13:30:21
||
|
![]() |
#10 得分:0
回复于: 2008-07-18 11:23:37
根本不一样两个函数的功能
|