zoukankan      html  css  js  c++  java
  • URL传中文参数导致乱码的解决方案之encodeURI

    在项目中碰到Windows.open(encodeURL(.........))中传递参数出现乱码,以下是解决方案:

    摘自:http://blog.csdn.net/zhxtpray/article/details/52440076

    [size=large]       通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码。解决方案有很多种。本文介绍如何通过encodeURI来解决中文乱码问题。

    首先,在前端页面准备参数的时候,需要对中文参数进行encode处理:

    var url = 'HelloWorldServlet?star_name='+
    encodeURI(encodeURI("刘德华"));
    window.open(url);

    其次,在服务端后台程序代码中用Java.NET.Decoder进行解码,从而得到中文参数的真实值:

    String starName = 
    java.net.URLDecoder.decode(request.getParameter("star_name"),"UTF-8");

    目的达到了。哈哈,很简单吧。不过此时你可能有个疑问,前端在进行encode编码是,为什么用了两次encodeURI,而服务器后端在解码时只解了一次?

    原因是:容器会默认帮你解一次码。

    此时,你可能又要问了,既然容器会默认解一次码,那么为什么不直接在前端只进行一次encode,服务端程序直接request.getParameter(“star_name”) ?画蛇添足了吧?

    原因是:容器默认解码时采用的编码是容器的默认编码,可能是UTF-8,GBK,也可能是其他编码方式。这与你的应用的编码方式未必会一致。所以你直接获取的话可能会出现乱码。

    当然也可以通过修改容器的默认编码,而实现“前端一次encode——后端直接获取”的途径获取中文参数。

    例如:Tomcat的默认编码修改方式:

    修改%TOMCAT_HOME%/conf/server.xml,找到这行代码:

    <Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000"/>

    在后面可以追加URIEncoding属性,例如:

    <Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000" URIEncoding="UTF-8"/>

    如果不方便改容器默认编码方式,或者应用程序本身就有多种编码方式的话,还是采取本文给出的解决方案,通过“前端两次encode——后端一次decode”的途径获取中文参数吧。

    That’s all ![/size]

  • 相关阅读:
    转载:有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
    生活该是什么样子
    怎么处理问题
    jquery.validate 1.7版本(remote方法)bug修复方法(一)
    jquery.ui.dialog 1.81在IE8中出现滚动条bug解决方法
    javascript 懒加载技术(lazyload)简单实现
    jquery.validate 1.7版本(remote方法)bug修复方法(二)
    发布一款JavaScript焦点图组件
    发布一款轻量级的JSON转换代码
    android_intent和intent_action大全 .
  • 原文地址:https://www.cnblogs.com/qinshou/p/6077586.html
Copyright © 2011-2022 走看看