有同事讨论到关于url编码的问题。
因此总结以下几点方法供大家参考。
首先,对于post请求的时候,通过过滤器就可以搞定,以下的方法主要是针对get方式的乱码处理。
1. 手工对字符串编码解码的方法为:
这个方法适用于自己从原始字符串中进行解码处理。
2. tomcat服务器的处理url编码的方法:
修改tomcat的server.xml增加指定的编码,以代替tomcat默认的ISO-8859-1。
需要增加的参数为:URIEncoding,
比如下面的例子是制定解码使用UTF-8,
如果用到了apache与tomcat 的整合,则还需要:
(这个方法最简单方便,但是使用这种的方法之后,代码中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); 这样的处理方式)
3.对于已经部署的系统,可能已经有其他同事对编码使用了
因此,我们可以自己重新解析queryString我封装了几个方法。使用重新封装的方法可以在不影响原来系统的情况下,正确的获得参数。
封装的代码如下,供大家参考:
转自http://www.blogjava.net/lizongbo/archive/2007/09/29/39833.html
因此总结以下几点方法供大家参考。
首先,对于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
发表评论
-
eclipse单个程序的jvm设置
2009-02-23 11:06 1832eclipse 有启动参数里设置jvm大小,因为eclipse ... -
[Portlet]tabs标签引用
2009-02-20 12:02 1327在liferay中封装了丰富的UI组件,其中一个比较常用的就是 ... -
JAVA上传图片时获取尺寸
2009-02-19 12:04 2808BufferedImage sourceImg = javax ... -
java读取配置文件的几种方法
2009-02-12 14:27 1248在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选 ... -
portal JSR168 上传下载
2009-02-11 15:49 992在portlet jsR 168中实现上传下载的问题 /* ... -
tomcat的OutOfMemoryError解决方法
2009-02-11 14:22 738最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植 ... -
zip解压
2009-02-11 14:17 947private static void extZi ... -
common-net包的ftp上传进度
2009-01-19 21:19 1782//上传文件 public void uploadFil ... -
用JakartaCommon的net组件来做ftp 文件传输(补充)
2009-01-12 14:21 800ftpClient.setControlEncoding(&q ... -
用JakartaCommon的net组件来做ftp 文件传输
2009-01-12 14:16 1201package com.wwkj.cms.test.ftp; ... -
tomcat传递url中文参数乱码
2008-12-26 15:36 796如果页面的编码正确,修改server.xml的connecto ... -
Hibernate的lazy属性失效
2008-12-26 15:28 926配置openSessionInViewFilter <f ... -
DWR session error
2008-12-26 15:25 828dwr不允许跨域访问,可在dwrservlet中加入 < ... -
获取时间
2008-12-26 15:00 531Calendar calendar = Calendar.ge ... -
excel汇出
2008-12-26 14:51 893输出html代码时,设置content-type为applic ...
相关推荐
URL编码的过程主要包括以下几个步骤: 1. 对每个非字母数字字符(ASCII值不在`a-zA-Z0-9`范围内)进行编码。 2. 将字符的ASCII码转换为十六进制表示。 3. 在每个十六进制数前添加百分号`%`。 例如,"Hello, World!...
在Web开发中,URL编码转换非常重要,主要体现在以下几个方面: 1. **数据完整性**:确保URL中的所有字符都被正确传输。 2. **跨平台兼容性**:不同的系统和浏览器可能使用不同的编码方式,统一使用URL编码可以提高...
URL编码主要涉及以下几个关键知识点: 1. **特殊字符**:一些字符在URL中具有特殊含义,如"&"用于分隔查询参数,"?"用于标记查询字符串的开始,这些字符在编码时需要转换。 2. **安全字符**:ASCII字符集中的一...
易语言URL编码转换模块源码是一个专为易语言设计的组件,用于处理URL编码和解码的任务。在互联网通信中,URL(统一资源定位符)是网页和其他网络资源的地址,但因为URL中可能包含非ASCII字符或者特殊字符,如空格、...
本文主要探讨了一个XSS三重URL编码绕过的实例,揭示了在某些情况下,简单的防御措施可能不足以阻止攻击。 首先,我们要理解XSS的基本概念。XSS攻击通常发生在Web应用程序未能正确过滤或转义用户输入的情况下。当...
在.NET Framework 4中,URL编码主要通过System.Web命名空间中的几个类和方法实现。以下是关键知识点的详细介绍: 1. **HttpUtility.UrlEncode**: 这是.NET中最常用的URL编码方法,位于System.Web命名空间下的...
在实际应用中,URL编码通常在以下几个场景出现: 1. **表单提交**:当用户在HTML表单中输入数据并提交时,浏览器会自动对非ASCII字符和特殊字符进行URL编码。 2. **查询字符串**:在URL的查询部分,如果包含空格或...
下面将详细解释标题和描述中提到的几个关键概念:二进制、十六进制、Base64、URL编码以及字符编码,并结合反查工具的使用进行讨论。 首先,二进制是一种最基础的数字系统,它只包含两个数字:0和1。计算机内部的...
了解这些解决方案后,开发者可以根据实际需求和环境选择最适合的方法来处理URL长度问题。在设计API或构建Web应用时,应尽可能避免依赖URL长度的极限,以确保兼容性和未来的可扩展性。同时,优化数据传输,减少不必要...
我们将重点关注以下几个方面: 1. **Base64编码**:Base64是一种用于将任意二进制数据编码为ASCII字符的算法,使得数据可以在大部分文本格式中安全传输,如URL。在Java中,`sun.misc.BASE64Encoder` 和 `sun.misc....
易语言URL编码转换模块源码主要涉及以下几个知识点: 1. **URL编码**:URL(统一资源定位符)是互联网上资源的唯一地址,但某些字符在URL中可能引起问题,如空格、特殊字符等。因此,根据RFC3986标准,这些字符需要...
解决这个问题的一种方法是编写自定义的C代码来处理URL编码和解码。从提供的文件名"URLEncode.h"和"URLUncode.h"来看,这似乎包含了用于URL编码和解码的头文件,它们可能是实现这一功能的关键。 编写这样的C代码,...
在URL编码时,UTF-8编码的每一个字节都会按照上述方法进行转换。解码时,需要根据字节的前几位来确定字符的长度,然后将这些字节还原为原始的Unicode字符。 这个程序的实现可能包括以下步骤: 1. 用户输入包含中文...
在标题为"C语言实用源码模块.rar_URL编码_url_url编码"的压缩包中,我们看到几个关键的编程知识点,主要涉及URL编码、鼠标位置捕获、本机IP地址获取、显示器控制、文件搜索、鼠标锁定以及任务计划的添加。...
下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要了解URL编码的基本原理。URL(统一资源定位符)不能包含某些特殊字符,如空格、逗号等,因此需要将这些字符转换为可安全传输的ASCII格式。...
、/这几个字符 window.location.href = 'c.php?key=' + keys; } ``` 在上述代码中,我们通过用户界面获取输入值,然后使用escape函数对这个值进行编码,并通过修改window.location.href的方式将参数传递到服务器端...
在处理URL时,我们可能会遇到一些常见的问题,例如: - 非ASCII字符编码:对于非英文字符,URL会使用UTF-8编码后再进行%编码。 - 正确处理+号:在查询字符串中,空格通常被编码为"+”,而不仅仅是"%20",解码时需要...
1. escape() 不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,escape()不对”+”编码主要用于汉子编码,现在已经不提倡使用了。 2. encodeURI()是...
### XSS三重URL编码绕过实例解析 #### 一、跨站脚本攻击(XSS)简介 跨站脚本攻击(Cross Site Scripting),简称XSS,是一种常见的网络安全威胁,它利用目标网站的信任关系向用户注入恶意脚本。攻击者通过在网页中...
通过对Tomcat环境下字符编码问题的研究,我们可以得出以下几点结论: - 统一编码标准是避免乱码的关键,建议在Tomcat及其应用中统一使用UTF-8编码。 - 对于不同的请求方式,应采取不同的策略来处理字符编码问题。 -...