zoukankan      html  css  js  c++  java
  • http request GET 乱码分析

    提交一个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")进行解码

  • 相关阅读:
    <转>CSS3 Media Queries 实现响应式设计
    css3的display:box研究
    CSS3制作渐变文字
    (转)apple-touch-icon-precomposed 和 apple-touch-icon属性区别
    (转)移动平台的meta标签
    day 57 jQuery插件
    day56 文件 文档处理,事件
    day 55 jQuery-part2
    day 54 jQuery, part-1
    day 52 dom 事件
  • 原文地址:https://www.cnblogs.com/learningchencheng/p/7716981.html
Copyright © 2011-2022 走看看