`
tomp110
  • 浏览: 31393 次
  • 性别: 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
分享到:
评论

相关推荐

    URL编码转换工具

    URL编码的过程主要包括以下几个步骤: 1. 对每个非字母数字字符(ASCII值不在`a-zA-Z0-9`范围内)进行编码。 2. 将字符的ASCII码转换为十六进制表示。 3. 在每个十六进制数前添加百分号`%`。 例如,"Hello, World!...

    url编码转化,将url转化成unicode进行传输

    在Web开发中,URL编码转换非常重要,主要体现在以下几个方面: 1. **数据完整性**:确保URL中的所有字符都被正确传输。 2. **跨平台兼容性**:不同的系统和浏览器可能使用不同的编码方式,统一使用URL编码可以提高...

    URL编码解码器

    URL编码主要涉及以下几个关键知识点: 1. **特殊字符**:一些字符在URL中具有特殊含义,如"&"用于分隔查询参数,"?"用于标记查询字符串的开始,这些字符在编码时需要转换。 2. **安全字符**:ASCII字符集中的一...

    易语言URL编码转换模块源码

    易语言URL编码转换模块源码是一个专为易语言设计的组件,用于处理URL编码和解码的任务。在互联网通信中,URL(统一资源定位符)是网页和其他网络资源的地址,但因为URL中可能包含非ASCII字符或者特殊字符,如空格、...

    第04篇:XSS三重URL编码绕过实例1

    本文主要探讨了一个XSS三重URL编码绕过的实例,揭示了在某些情况下,简单的防御措施可能不足以阻止攻击。 首先,我们要理解XSS的基本概念。XSS攻击通常发生在Web应用程序未能正确过滤或转义用户输入的情况下。当...

    URL编码.net4 环境

    在.NET Framework 4中,URL编码主要通过System.Web命名空间中的几个类和方法实现。以下是关键知识点的详细介绍: 1. **HttpUtility.UrlEncode**: 这是.NET中最常用的URL编码方法,位于System.Web命名空间下的...

    Encode_ Decode Tools URL编码解码工具

    在实际应用中,URL编码通常在以下几个场景出现: 1. **表单提交**:当用户在HTML表单中输入数据并提交时,浏览器会自动对非ASCII字符和特殊字符进行URL编码。 2. **查询字符串**:在URL的查询部分,如果包含空格或...

    二进制,十六进制,Base64, URL编码,字符编码,反查工具

    下面将详细解释标题和描述中提到的几个关键概念:二进制、十六进制、Base64、URL编码以及字符编码,并结合反查工具的使用进行讨论。 首先,二进制是一种最基础的数字系统,它只包含两个数字:0和1。计算机内部的...

    解决URL长度的问题

    了解这些解决方案后,开发者可以根据实际需求和环境选择最适合的方法来处理URL长度问题。在设计API或构建Web应用时,应尽可能避免依赖URL长度的极限,以确保兼容性和未来的可扩展性。同时,优化数据传输,减少不必要...

    Java实现url加密处理的方法示例

    我们将重点关注以下几个方面: 1. **Base64编码**:Base64是一种用于将任意二进制数据编码为ASCII字符的算法,使得数据可以在大部分文本格式中安全传输,如URL。在Java中,`sun.misc.BASE64Encoder` 和 `sun.misc....

    易语言源码易语言URL编码转换模块源码.rar

    易语言URL编码转换模块源码主要涉及以下几个知识点: 1. **URL编码**:URL(统一资源定位符)是互联网上资源的唯一地址,但某些字符在URL中可能引起问题,如空格、特殊字符等。因此,根据RFC3986标准,这些字符需要...

    loadrunner中处理url编码的方式,不支持中文

    解决这个问题的一种方法是编写自定义的C代码来处理URL编码和解码。从提供的文件名"URLEncode.h"和"URLUncode.h"来看,这似乎包含了用于URL编码和解码的头文件,它们可能是实现这一功能的关键。 编写这样的C代码,...

    Url编码转换程序 gb2312 utf-8 编码 解码

    在URL编码时,UTF-8编码的每一个字节都会按照上述方法进行转换。解码时,需要根据字节的前几位来确定字符的长度,然后将这些字节还原为原始的Unicode字符。 这个程序的实现可能包括以下步骤: 1. 用户输入包含中文...

    C语言实用源码模块.rar_URL编码_url_url 编码

    在标题为"C语言实用源码模块.rar_URL编码_url_url编码"的压缩包中,我们看到几个关键的编程知识点,主要涉及URL编码、鼠标位置捕获、本机IP地址获取、显示器控制、文件搜索、鼠标锁定以及任务计划的添加。...

    java中文乱码之解决URL中文乱码问题的方法

    下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要了解URL编码的基本原理。URL(统一资源定位符)不能包含某些特殊字符,如空格、逗号等,因此需要将这些字符转换为可安全传输的ASCII格式。...

    php获取URL中带#号等特殊符号参数的解决方法

    、/这几个字符 window.location.href = 'c.php?key=' + keys; } ``` 在上述代码中,我们通过用户界面获取输入值,然后使用escape函数对这个值进行编码,并通过修改window.location.href的方式将参数传递到服务器端...

    url解码程序,主要针对HTTP

    在处理URL时,我们可能会遇到一些常见的问题,例如: - 非ASCII字符编码:对于非英文字符,URL会使用UTF-8编码后再进行%编码。 - 正确处理+号:在查询字符串中,空格通常被编码为"+”,而不仅仅是"%20",解码时需要...

    javascript url几种编码方式详解

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

    XSS三重URL编码绕过实例.pdf

    ### XSS三重URL编码绕过实例解析 #### 一、跨站脚本攻击(XSS)简介 跨站脚本攻击(Cross Site Scripting),简称XSS,是一种常见的网络安全威胁,它利用目标网站的信任关系向用户注入恶意脚本。攻击者通过在网页中...

    tomcat字符编码总结

    通过对Tomcat环境下字符编码问题的研究,我们可以得出以下几点结论: - 统一编码标准是避免乱码的关键,建议在Tomcat及其应用中统一使用UTF-8编码。 - 对于不同的请求方式,应采取不同的策略来处理字符编码问题。 -...

Global site tag (gtag.js) - Google Analytics