http request GET 乱码分析
2024-08-27 19:18:14
提交一个GET请求
在浏览器地址栏或搜索框输入地址:http://www.baidu.com/content/衣服?keyword=衬衣
其中的中文会被浏览器进行编码,具体编码情况请参考阮大神:关于URL编码
然后,请求需要经过这些处理
1.web server,tomcat
在这里tomcat 有这么两个属性
1.URIEncoding
:这个可以强制指定用什么编码处理URI,默认是ISO-8859-1;
2.useBodyEncodingForURI
:这个设置为true,我们就可以用request.setCharacterEncoding()
来设置编码了. 注:这个属性只影响后面的参数
2.servlet/filter
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
这个地方查看源码,只是设置了request的编码,跟URI没有任何关系
if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
request.setCharacterEncoding(this.encoding);
if (this.forceEncoding) {
response.setCharacterEncoding(this.encoding);
}
}
总结
经过上面的分析,提出的解决方法是设置tomcat参数。但是这种解决方案会遇到客户端编码不确定的问题,这样又需要引入编码自动分析,增加了后台的复杂性,一般的应用都没有太大的这方面必要。所以这里推荐在前台使用encodeURIComponent(encodeURIComponent(URI))进行两次编码,并且在后台使用URLDecoder.decode(param, "utf-8")
进行解码
最新文章
- [LeetCode] Random Pick Index 随机拾取序列
- Devexpress使用经验1
- HDU 5937 Equation
- C#的多态性
- 使用Memcached提高.NET应用程序的性能
- skill-判断浏览器
- SQL优化之索引
- Java IO5:序列化与反序列化
- (Relax 数论1.6)POJ 1061 青蛙的约会(扩展的欧几里得公式)
- 一张图告诉你什么是Linux distributions...
- PHP中文关键词匹配
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
- 【转】AB实验设计思路及实验落地
- BZOJ 1010: 玩具装箱toy (斜率优化dp)
- Centos 上部署 tomcat7
- Jenkins实现自动运行jmeter脚本
- web 页面间传值 js 封装方法
- Statement和PreparedStatement的异同
- MATLAB GUI图片添加背景
- YII2中验证码的使用