问题原因
咱们做网站设计的时候经常会用到ajax和JQuery这两样东西,它们可以帮助咱们在网页之间传递信息和数据。但是,你知道吗,如果参数里有中文,那可就麻烦大了!这究竟是咋回事?其实非常简单,就是因为浏览器在发送请求的时候,会按照一定的规矩把链接中的特殊符号给转换编码。不同的编码方式转换同一个汉字的结果可是不一样滴!比如,“中”这个字,GB2312编码下就变成了”D6D0″,UTF-8编码下则变成了”E4B8AD”。要是用GET方法的话,浏览器会自己解决编码问题;不过如果是用JQuery的ajax函数,一旦遇到中文参数,JQuery就会直接换成UTF-8编码。但服务器接到请求之后,会根据设置好的编码规则解码参数并进行反编译,这样一来,原来整齐的中文可能会变得乱七八糟了。
解决方法
修改服务器端编码方式
搞定!只要把服务器代码改到 UTF-8就行,乱码根本不用怕。比如在 Java JSP 代码中,加上个小脚本来指定只能用 UTF-8,问题就解决了!
request.setCharacterEncoding("UTF-8");
修改jQuery编码方式
你是不是正用jQuery处理ajax?如果是的话,那你肯定清楚如何调整这两个小参数解决编码问题了对不对?记得,把processData设为false就能轻松解决编码问题。要是想要使用UTF-8编码,就在contentType那儿加上”application/x-www-form-urlencoded;charset=utf-8″这几个字就行,真的超级容易!
编解码转换
$.ajax({ url: 'xxx', data: { name: '中文' }, type: 'GET', processData: false, contentType: 'application/x-www-form-urlencoded;charset=utf-8', success: function(data) { // 处理返回数据 }, error: function(xhr, textStatus, errorThrown) { // 处理错误 } });
别急,试试其他方式编码,可能得多花点儿心思。像JQuery里面的encodeURI和decodeURI就能搞定这个问题了。当然,还有server端的unescape方法能帮助你恢复原始参数!
总结
搞定JS“乱码”问题,有巧妙办法!咱们可以让服务器那边利索点儿,修改下jQuery的编码模式,不行咱就亲自动手编转码,这三个法子管用得很!学会它们,不怕参数乱码,工作效率提升,错误也少,感觉超级有意思!
除了刚刚提到的那几点外,还有几个小建议哈:表没填写错?别忘了看看参数,咱们能不能处理?修东西的时候别忘了那个”开发者工具”,可以查看到请求头和响应信息,助力你解决问题
var name = '中文'; var encodedName = encodeURI(name); // 对名称进行编码 $.ajax({ url: 'xxx?name=' + encodedName, // 将编码后的名称传递给服务器 type: 'GET', success: function(data) { // 处理返回数据 }, error: function(xhr, textStatus, errorThrown) { // 处理错误 } });
说真的,有时候,跨域访问会把搜索链接搞得乱七八糟。这时候,咱们需要在服务器上搞点特殊设置,加上几个专用的跨域请求头。但是别急,前后端都得弄明白要用啥字符集,弄懂如何进行编码转化就好。
搞定网站参数编码这种事儿,就得看咱们前后端各自怎么处理了。看具体情况行事,才能找到合适的解决方法!别忘了,学习多了,遇到问题也就轻松应对!
String str = request.getParameter("name"); str = URLDecoder.decode(str, "UTF-8"); str = unescape(str);
。
评论0