escape()、encodeURI()、encodeURIComponent()都可以对字符进行编码转换.
如,escape('中文') == %u4e2d%u6587
encodeURI('中文') == %e4%b8%ad%e6%96%87当需要通过url以get方式提交中文参数的时候,即便以如上方法转码了.也传递不出去,因为url中%为转义字符.
问题就是:为什么要有如上设计?即为什么如上3个方法处理过的字符串刚好和url的转义字符冲突呢?更进一步,不考虑服务器以何种编码处理url,如何在页面转码以及在服务端的解码?现在我的做法是页面jsvar url = 'xxxxx.do?param='+encodeURI('中文').replace(/%/g,'%25');服务端java.net.URLDecoder.decode(request.getParameter('param'),"utf-8");感觉非常别扭,有没有好点的方法,或者你们怎么处理这种问题呢?(此时客观原因不能使用post提交)
如,escape('中文') == %u4e2d%u6587
encodeURI('中文') == %e4%b8%ad%e6%96%87当需要通过url以get方式提交中文参数的时候,即便以如上方法转码了.也传递不出去,因为url中%为转义字符.
问题就是:为什么要有如上设计?即为什么如上3个方法处理过的字符串刚好和url的转义字符冲突呢?更进一步,不考虑服务器以何种编码处理url,如何在页面转码以及在服务端的解码?现在我的做法是页面jsvar url = 'xxxxx.do?param='+encodeURI('中文').replace(/%/g,'%25');服务端java.net.URLDecoder.decode(request.getParameter('param'),"utf-8");感觉非常别扭,有没有好点的方法,或者你们怎么处理这种问题呢?(此时客观原因不能使用post提交)
xxxx.do?param=%1233比如这样。后台将什么都接收不到.因为%是转义字符.后台取param的值还是空的.
如果直接xxxx.do?param=encodeURI('中文之类')的。这样结果出来还是类似
xxxx.do?param=%e4%b8%ad%e6%96%87 百分号后转了下.就乱了.
还是我用法不对。该encodeURI(xxxx.do?param='中文')把地址全包住?
明天再试下.
encodeURI('xxxxx.do?param=中文');问号虽然不被编码,可出现了%到服务器上也不正常了..
还是行不通.应该很简单啊..
String param = request.getParameter("param");
不确定服务器端以何种编码解 URI ,且无法自己控制时
可用二次编码function encURI(x) { return encodeURIComponent(encodeURIComponent(x)); }
var url = 'xxxxx.do?param='+encURI('中文');
// 服务端需要用 URLDecoder.decode 多解一次 URI
java.net.URLDecoder.decode(request.getParameter('param'), "utf-8");