js传值乱码问题
2010-9-2 杜世伟 JavaScript
在用ajax+JavaScript+php进行局部刷新的时候要用到JavaScript传值,如果处理不当会出现乱码,在本地测试没有问题的,在服务器上就是不行,我做了很长时间的测试,终于把问题解决掉了,我把两种可以解决的方法写下,希望对你有所帮助:
1.在JavaScript传值的时候为了出现乱码问题,你可以使用JavaScript特有的函数escape进行编码的转换,如xmlhttp.send("comment_input="+escape(comment_input)),在php页面获取该值的时候把转码后的值在进行转码,可以使用
	function unescape($str)//定义unescape解码函数(解决js传递乱码问题)
	{  
	 $str = rawurldecode($str);  
	 preg_match_all("/(?:%u.{4})|.+/",$str,$r);  
	 $ar = $r[0];  
	 foreach($ar as $k=>$v) 
	 {  
	     if(substr($v,0,2) == "%u" && strlen($v) == 6)  
	     $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4)));
	 }  
	 return join("",$ar);
}
这样既可实现中文编码的转换,进而在php换取该值的时候不会出现乱码;
2.或许你会觉得第一种方法比较麻烦,或者它不能够解决你所遇到的问题,我在此在写一种方法希望可以帮你解决 在ajax进行传值的时候,你可以不用去管中文编码是怎样转换的,既直接把你获取的值传递过去,如xmlhttp.send("comment_input="+comment_input),但是这样做的时候,由于浏览器会对中文进行编码的解析,在php页面获取该值的时候,你获取会得到乱码,这样要用到php一个特有的函数,把你在php页面获取的值进行一次编码转换,函数为mb_convert_encoding("获取的字符串","GB2312","UTF-8");然后进行输出,既可解决乱码的问题.....
希望这两种方法,可以解决你遇到的问题.....谢谢...
热门日志
分类
- git(9)
 - Mac(7)
 - C(1)
 - memcache(1)
 - Python(32)
 - Vim(8)
 - sed(2)
 - ansible(3)
 - awk(4)
 - shell(3)
 - Django(4)
 - ssdb(1)
 - bat(4)
 - svn(0)
 - docker(1)
 - Tornado(1)
 - go(2)
 - 架构(19)
 - Vue(1)
 - game(2)
 - AI(1)
 - Windows(8)
 - Java(8)
 - Mysql(38)
 - Ajax(2)
 - Jsp(1)
 - Struts(8)
 - Linux(73)
 - JavaScript(39)
 - Staruml(0)
 - Mouth(1)
 - Html(6)
 - Php(102)
 - Message(51)
 - Lua(10)
 - Compute(1)
 - Redis(7)
 - Nginx(12)
 - Jquery(1)
 - Apache(1)
 - cocos2d-x(8)
 - about(1)
 

