`
tomp110
  • 浏览: 30570 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于url编码问题的处理的几个方法的总结

    博客分类:
  • Java
阅读更多
有同事讨论到关于url编码的问题。
因此总结以下几点方法供大家参考。
首先,对于post请求的时候,通过过滤器就可以搞定,以下的方法主要是针对get方式的乱码处理。

1. 手工对字符串编码解码的方法为:
java.net.URLEncoder.encode("测试","UTF-8");
java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");

这个方法适用于自己从原始字符串中进行解码处理。

2. tomcat服务器的处理url编码的方法:

修改tomcat的server.xml增加指定的编码,以代替tomcat默认的ISO-8859-1。
需要增加的参数为:URIEncoding,
比如下面的例子是制定解码使用UTF-8,
<Connector port="8080"
maxThreads="800" minSpareThreads="25" maxSpareThreads="100"
enableLookups="false" redirectPort="8443" acceptCount="0"
debug="0" connectionTimeout="20000" URIEncoding="UTF-8"
disableUploadTimeout="true" />

如果用到了apache与tomcat 的整合,则还需要:
<Connector port="8009" URIEncoding="UTF-8"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100" acceptCount="0"/>

(这个方法最简单方便,但是使用这种的方法之后,代码中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); 这样的处理方式)

3.对于已经部署的系统,可能已经有其他同事对编码使用了
new String(strvalue.getBytes("ISO8859-1","GBK"); 
这样的方法作了处理,这个时候使用第二种方法就可能会影响到其它模块的正常使用,

因此,我们可以自己重新解析queryString我封装了几个方法。使用重新封装的方法可以在不影响原来系统的情况下,正确的获得参数。

封装的代码如下,供大家参考:



/**
* 从请求的url字符串中解析参数,当request.getParameterValues()取得的参数值编码值不正确的时候可以使用该方法
* @param request HttpServletRequest
* @param paramName String
* @return String[] 返回多个同参数名的值
*/
public static String[] getParamsFromQueryString(HttpServletRequest request,
String paramName) {
return getParamsFromQueryString(request.getQueryString(), paramName);
}

/**
* 从请求的url字符串中解析参数,当request.getParameterValues()取得的参数值编码值不正确的时候可以使用该方法
* @param request HttpServletRequest
* @param paramName String
* @return String[]
*/
public static String getParameterFromQueryString(HttpServletRequest request,
String paramName) {
return getParameterFromQueryString(request.getQueryString(), paramName);
}

/**
* 从请求的url字符串中解析参数,当request.getParameter()取得的参数值编码值不正确的时候可以使用该方法
* @param queryString String
* @param paramName String
* @return String 只返回一个值
*/
public static String getParameterFromQueryString(String queryString,
String paramName) {
String[] s = getParamsFromQueryString(queryString, paramName);
if (s != null && s.length >= 1) {
return s[0];
}
return null;
}

/**
* 从请求的url字符串中解析参数,当request.getParameter()取得的参数值编码值不正确的时候可以使用该方法
* @param queryString String
* @param paramName String
* @return String[] 返回多个同参数名的值
*/
public static String[] getParamsFromQueryString(String queryString,
String paramName) {
if (paramName == null || paramName.length() < 1 || paramName == null ||
paramName.length() < 1) {
return new String[0];
}
List rsl = new ArrayList();
String params[] = queryString.split("&");
for (int i = 0; i < params.length; i++) {
// System.out.println(params[i]);
if (params[i] != null && params[i].startsWith(paramName + "=")) {
try {
rsl.add(java.net.URLDecoder.decode(params[i].substring(paramName.
length() +
1), "UTF-8")); //根据需要修改自己要使用的编码。
}
catch (UnsupportedEncodingException ex) {
}
}
}
return (String[]) rsl.toArray(new String[0]);
}

public static void main(String[] args) {
//该例子演示解码。
//jsp和servlet中调用
// System.out.println(getParameterFromQueryString(request.getQueryString(), "q"));
//该例子示意的是gogole的url中的queryString。
System.out.println(getParameterFromQueryString(
"hl=zh-CN&newwindow=1&q=%E6%B5%8B%E8%AF%95%26%3Faaa&meta=", "q"));
}

转自http://www.blogjava.net/lizongbo/archive/2007/09/29/39833.html
分享到:
评论

相关推荐

    javascript url几种编码方式详解

    1. escape() 不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,escape()不对”+”编码主要用于汉子编码,现在已经不提倡使用了。 2. encodeURI()是...

    url编码解码编码工具(支持大数据)

    这个软件对解码数据大小没有要求,几十MB,几百MB都没问题

    Java应用中的编码问题

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e...

    VB根据网页源代码分析URL链接.rar

    取url的长度为300,如果超过则检测不到,这300个字符中可能包含下一个或几个HREF标签,但这不用担心,程序会分析每个标签的。  为什么取那么多,是因为很多网页的URL编码可能很长,比如百度推广的广告和陶宝网的...

    字符集 字符编码的发展以及各种编码的含义用途

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码 sqlserver里面有char和nchar,那个...

    java-servlet-api.doc

    然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...

    FFmpeg Batch AV Converter2.8一款专业的通用音频和视频编码器.exe

    FFmpeg Batch AV Converter是一款专业的通用音频和视频编码器,只需...3、可以批量处理多文件,批量编码成千上万个媒体文件。 4、完成媒体文件编码之后支持自动关闭,并运行后续脚本。 5、支持用户自定义设置媒体编码

    JS-VBS-Samples.rar_数据库 编码 实例

    自己初学VBS JS脚本后完成的几个实例 部分 JS/VBS 程序作品演示 // sunyueming url generator v0.4a 设计这个程序的目的是为了快速的下载网上的一些成序列的图片,它可以生成一大排链接,还可以预览图片,当然可以...

    详谈js对url进行编码和解码(三种方式的区别)

    实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如”春节”的返回结果是%u6625%u8282,也就是说在Unicode字符集中,”春”是第6625个(十六进制)字符,”节”是第8282个...

    java 面试题 总结

    创建了几个String Object? 两个 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ ...

    在ASP.NET中重写URL的代码

    这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的结构。 为什么URL映射和重写很重要? 下面是开发人员想要对URL有更大的灵活性的最常见的场景: 1) ...

    tomcat值乱码解决

    最近几个项目,都出现了乱码问题。某些通过URL来传送、值为汉字的参数,在页面中显示的是乱码,但是在本地开发环境是正常显示的。排除的因素当然就是服务器的设置不当了,但具体是那些原因呢?一般我们所装的linux...

    asp.net乱码解决方法

     一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是...

    delphi调用百度API实现图片文字识别

    在开发中遇到了几个问题,现写出来供需要的朋友参考。 1. SSL问题,用的是indyhttp控件,使用SSL时需要添加 IdSSLIOHandlerSocketOpenSSL1 组件 然后 idhttp的iohandler 属性指向 IdSSLIOHandlerSocketOpenSSL1。 ...

    一个简单的java爬虫产品

     这个产品,做到现在,我遇到了这么几个情况,有和大家分享的,也有向大家请教,求助的。  1.关于对应关系数据的保存方式  在创建索引的时候,需要将网页的URL和网页的内容传到相应的方法中,当然URL和内容是要...

    java字符集

    本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e...

    hr-code:人类响应代码:旨在被人类和OCR识别。 将所有有效的URL字符编码为图像

    QR码最普遍的用例是将URL编码为图像。 为此,HR代码相对于QR代码具有以下优点和缺点:好处用户可以在不费力地扫描数据之前先了解一下数据。 由于用户还可以看到打印的URL,因此更能抵抗网络钓鱼攻击。 通过在打印的...

    jpivot学习总结.doc

    这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个...

    imgix-core-js:一个JavaScript客户端库,用于使用imgix生成图像URL

    imgix-core-js是一个JavaScript库,用于使用生成图像URL,该URL可在浏览器或... 每当您将数据提供给imgix-core-js时,请确保其尚未经过URL编码,因为该库会在内部处理正确的编码。 普通JS var ImgixClient = require

Global site tag (gtag.js) - Google Analytics