AJAX与PHP传递中文数据

传英文数据很easy,中文的话,用AJAX的POST方式。我自己试过是没有问题,结果有一天一个网友跟我说POST过去还是乱码。我觉得应该就是前后的字符集没有对上号的问题吧。

后来建议他改用GET传递的,但是中文数据要escape一下。PHP在unescape。

PHP的unescape两个实现贴一下。

php代码
  1. /*这个方法需要iconv支持*/ 
  2. $str=$_GET["yourdata"]; //escape过的中文数据  
  3. $str = rawurldecode($str);   
  4. preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r);   
  5. $ar = $r[0];   
  6. foreach($ar as $k=>$v)  
  7. {   
  8. if(substr($v,0,2) == "%u")   
  9.      $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));   
  10. elseif(substr($v,0,3) == "&#x")   
  11.      $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));   
  12. elseif(substr($v,0,2) == "&#")  
  13.      $ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));   
  14. }  
  15. $result = join("",$ar); //unescape的中文数据  
  16.  
  17.  
  18. /*不需要iconv支持,转换结果为UTF8编码*/ 
  19. function phpUnescape($escstr)  
  20. {  
  21.     preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/"$escstr$matches); //prt($matches);  
  22.     $ar = &$matches[0];  
  23.     $c = "";  
  24.     foreach ($ar as $val) {  
  25.         if (substr($val, 0, 1) != "%") { //如果是字母数字+-_.的ascii码  
  26.             $c .= $val;  
  27.         } elseif (substr($val, 1, 1) != "u") { //如果是非字母数字+-_.的ascii码  
  28.             $x = hexdec(substr($val, 1, 2));  
  29.             $c .= chr($x);  
  30.         } else { //如果是大于0xFF的码  
  31.             $val = intval(substr($val, 2), 16);  
  32.             if ($val < 0x7F) { // 0000-007F  
  33.                 $c .= chr($val);  
  34.             } elseif ($val < 0x800) { // 0080-0800  
  35.                 $c .= chr(0xC0 | ($val / 64));  
  36.                 $c .= chr(0x80 | ($val % 64));  
  37.             } else { // 0800-FFFF  
  38.                 $c .= chr(0xE0 | (($val / 64) / 64));  
  39.                 $c .= chr(0x80 | (($val / 64) % 64));  
  40.                 $c .= chr(0x80 | ($val % 64));  
  41.             }  
  42.         }  
  43.     }  
  44.     return $c;  

 

Tags: javascript, php
上一篇: C++中文分词程序
下一篇: 使用Javascript在特定的地方拦截鼠标右键

相关日志推荐
ajax中文乱码问题解决(PHP)
基于jquery的随机软键盘
YII的layout居然无法共享controller通过push方式设置的变量
[转载]PHP header函数用法
yii普通filter的accessRules函数中roles属性其实无效

0 条留言

发表评论

  
  
   (点击图片更换验证码)
点击刷新验证码