Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22974
  • 博文数量: 10
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 11:26
文章分类

全部博文(10)

文章存档

2010年(10)

我的朋友
最近访客

分类: 系统运维

2010-06-17 15:53:17

Ajax传英文数据很容易,要是传递中文的话,如果是使用GET传递的,中文数据要escape一下。PHP在unescape。PHP的unescape两个实现贴一下。
php代码
方法一:
/*这个方法需要iconv支持*/
 $str=$_GET["yourdata"]; //escape过的中文数据
 $str = rawurldecode($str);
 preg_match_all("/%u.{4}|.{4};|&#\d+;|.+/U",$str,$r);
 $ar = $r[0];
 foreach($ar as $k=>$v)
 {
    if(substr($v,0,2) == "%u")
        $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
    elseif(substr($v,0,3) == "")
        $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
    elseif(substr($v,0,2) == "&#")
        $ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
 }
 $result = join("",$ar); //unescape的中文数据  
方法二:/*不需要iconv支持,转换结果为UTF8编码*/
function phpUnescape($escstr)
{
preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/", $escstr, $matches); //prt($matches);

$ar = &$matches[0];
$c = "";
foreach ($ar as $val)
{
    if (substr($val, 0, 1) != "%")
    { //如果是字母数字+-_.的ascii码
       $c .= $val;
    }
    elseif(substr($val, 1, 1) != "u")
    { //如果是非字母数字+-_.的scii码
         $x = hexdec(substr($val, 1, 2));
         $c .= chr($x);
    }
    else
    { //如果是大于0xFF的码
        $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;
}


阅读(376) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~