AJAX与PHP传递中文数据
传英文数据很easy,中文的话,用AJAX的POST方式。我自己试过是没有问题,结果有一天一个网友跟我说POST过去还是乱码。我觉得应该就是前后的字符集没有对上号的问题吧。
后来建议他改用GET传递的,但是中文数据要escape一下。PHP在unescape。
PHP的unescape两个实现贴一下。
php代码
- /*这个方法需要iconv支持*/
- $str=$_GET["yourdata"]; //escape过的中文数据
- $str = rawurldecode($str);
- preg_match_all("/%u.{4}|&#x.{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) == "&#x")
- $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") { //如果是非字母数字+-_.的ascii码
- $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;
- }
上一篇:
C++中文分词程序
相关日志推荐
0 条留言
发表评论