tomcat编码问题
1.get请求参数(url参数)
客户端编码:get请求是url参数,编码用的是浏览器默认的,也可以指定,用 var encodedValue = encodeURIComponent(value);不过这个编码是utf-8的。
服务端解码:首先tomcat的url参数默认解码方式8.0.30之前是iso8859-1,之后是utf-8。如果要额外指定,需要配置server.xml文件,添加urlencoding=GBK。如果指定了usebodyencodingforurl=true,则会使用表单请求体,context-type的编码。优先级urlencoding更高?
var query = window.location.search; var form = document.getElementById('loginForm'); var actionUrl = form.action; var baseUrl = actionUrl.split('?')[0]; var queryParams = actionUrl.split('?')[1]; if (queryParams) { var paramsArray = queryParams.split('&'); var encodedParams = []; for (var i = 0; i < paramsArray.length; i++) { var param = paramsArray[i]; var keyValue = param.split('='); var key = keyValue[0]; var value = keyValue[1]; var encodedValue = encodeURIComponent(value); encodedParams.push(key + '=' + encodedValue); } form.action = baseUrl + '?' + encodedParams.join('&'); } // 继续表单提交 return true;
post请求:表单数据
1.客户端编码:设置请求头的context-type。
2.服务端解码:默认使用请求头传过来的context-type。要不就设置request.setCharacterEncoding,要不就加个过滤器。