文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>AJAX与PHP传递中文数据

AJAX与PHP传递中文数据

时间:2010-06-17  来源:humanux

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;
}


相关阅读 更多 +
排行榜 更多 +
动物大战僵尸I

动物大战僵尸I

飞行射击 下载
龙兽争霸无限零件图纸

龙兽争霸无限零件图纸

飞行射击 下载
金属战士2最新版

金属战士2最新版

飞行射击 下载