php escape 编码问题

hfsross 2007-10-06 06: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
在这里万分的感谢
例如

<script>document.write(escape('中国'));</script>
<br />
<? echo(urlencode('中国')); ?><br />
<? echo(urldecode('%u4E2D%u56FD')); ?>

输出的结果不一样
...全文
2225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jayboy115519889 2008-07-18
  • 打赏
  • 举报
回复
根本不一样两个函数的功能
LastGame 2008-06-16
  • 打赏
  • 举报
回复
||
LastGame 2008-06-16
  • 打赏
  • 举报
回复
|||
king2world 2007-10-10
  • 打赏
  • 举报
回复
如果实在要用gb2312的话,也是使用encodeURIComponent, 这个函数会把js里边gb2312的内容转成utf8,然后urlencode编码,在php里边 urldecode以后 mb_convert_encoding转成gb2312就可以了
king2world 2007-10-10
  • 打赏
  • 举报
回复
建议使用utf8编码, 然后使用javascript的encodeURIComponent函数
li36669957 2007-10-10
  • 打赏
  • 举报
回复
<?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
sssky 2007-10-08
  • 打赏
  • 举报
回复
我再送你一个,把下面作为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;
}
poonzsp 2007-10-07
  • 打赏
  • 举报
回复
还有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);
}
hfsross 2007-10-07
  • 打赏
  • 举报
回复
顶上去
怎么没人知道呢
解决方法呢
hfsross 2007-10-07
  • 打赏
  • 举报
回复
解码呢?
unescape有没有?

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧