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");然后进行输出,既可解决乱码的问题.....
希望这两种方法,可以解决你遇到的问题.....谢谢...
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(18)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(72)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)