AJAX与PHP传递中文数据
时间:2010-06-17 来源:humanux
Ajax传英文数据很容易,要是传递中文的话,如果是使用GET传递的,中文数据要escape一下。PHP在unescape。PHP的unescape两个实现贴一下。
php代码
方法一:
/*这个方法需要iconv支持*/
方法二:/*不需要iconv支持,转换结果为UTF8编码*/
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的中文数据 |
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; } |
相关阅读 更多 +