在struts2.0中,把所有编码设置为utf-8,表单使用post方法提交,在服务器端取得的汉字数据不会出现乱码。
但是如果使用get方法提交,就会出现编码。
开始认为:以后全使用post方法不就行了嘛!
但是又遇到了这样的情况:
<a href="test.action?name='你好'">链接</a>
如果使用这样的方法提交参数与使用get方法提交表单是一样的,参数都会在地址栏中显示,如下:
http://localhost:8080/test/test.action?name=%E4%BD%A0%E5%A5%BD
但是这个中文参数在服务器端显示是乱码的。可以使用以下处理将其不乱码,下面是一个具有汉字与型如“%E4%BD%A0%E5%A5%BD ”相互转换的工具类:
package com.shiyihr.util;
public class CodingUtil {
//将汉字转换为%E4%BD%A0%E5%A5%BD形式
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = String.valueOf(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
//将%E4%BD%A0%E5%A5%BD转换为汉字
public static String unescape(String s) {
StringBuffer sbuf = new StringBuffer () ;
int l = s.length() ;
int ch = -1 ;
int b, sumb = 0;
for (int i = 0, more = -1 ; i < l ; i++) {
/* Get next byte b from URL segment s */
switch (ch = s.charAt(i)) {
case '%':
ch = s.charAt (++i) ;
int hb = (Character.isDigit ((char) ch)
? ch - '0'
: 10+Character.toLowerCase((char) ch) - 'a') & 0xF ;
ch = s.charAt (++i) ;
int lb = (Character.isDigit ((char) ch)
? ch - '0'
: 10+Character.toLowerCase ((char) ch)-'a') & 0xF ;
b = (hb << 4) | lb ;
break ;
case '+':
b = ' ' ;
break ;
default:
b = ch ;
}
/* Decode byte b as UTF-8, sumb collects incomplete chars */
if ((b & 0xc0) == 0x80) { // 10xxxxxx (continuation byte)
sumb = (sumb << 6) | (b & 0x3f) ; // Add 6 bits to sumb
if (--more == 0) sbuf.append((char) sumb) ; // Add char to sbuf
} else if ((b & 0x80) == 0x00) { // 0xxxxxxx (yields 7 bits)
sbuf.append((char) b) ; // Store in sbuf
} else if ((b & 0xe0) == 0xc0) { // 110xxxxx (yields 5 bits)
sumb = b & 0x1f;
more = 1; // Expect 1 more byte
} else if ((b & 0xf0) == 0xe0) { // 1110xxxx (yields 4 bits)
sumb = b & 0x0f;
more = 2; // Expect 2 more bytes
} else if ((b & 0xf8) == 0xf0) { // 11110xxx (yields 3 bits)
sumb = b & 0x07;
more = 3; // Expect 3 more bytes
} else if ((b & 0xfc) == 0xf8) { // 111110xx (yields 2 bits)
sumb = b & 0x03;
more = 4; // Expect 4 more bytes
} else /*if ((b & 0xfe) == 0xfc)*/ { // 1111110x (yields 1 bit)
sumb = b & 0x01;
more = 5; // Expect 5 more bytes
}
/* We don't test if the UTF-8 encoding is well-formed */
}
return sbuf.toString() ;
}
}
分享到:
相关推荐
### 解决JSP提交乱码的...同时,对于GET请求,可以通过修改Tomcat配置或使用`URLEncoder.encode()`方法来解决乱码问题;对于POST请求,则需要关注表单的`enctype`属性以及`request.setCharacterEncoding()`方法的使用。
在IT行业中,尤其是在Web开发领域,处理中文参数的乱码问题是一个常见的挑战。本文主要讨论的是JSP中URL中中文参数导致的乱码问题及其解决方案。 首先,让我们深入理解HTTP请求的基本原理。HTTP请求有两种主要的...
其中save(FileActionForm fileForm)方法,将封装在fileForm中的上传文件保存到数据库中,这里我们使用FileActionForm作为方法入参,FileActionForm是Web层的表单数据对象,它封装了提交表单的数据。将...
在实际开发中,为了减少中文乱码问题的发生,建议: - 在JSP页面的头部统一设置字符编码,并确保整个项目中使用的字符编码一致。 - 使用POST方法传递中文参数,避免在URL中直接暴露中文参数。 - 对于GET方法传递的...
当使用 GET 方法提交时,表单数据会附加在 URL 后面,可能会出现中文乱码。解决方法是,先将获取到的参数值转换为字节数组,再转换成指定编码格式的字符串。 ```java String name = request.getParameter("name"); ...
在Web开发中,请求参数的获取是至关重要的,它涉及到用户与服务器之间的数据交互。本文主要探讨了通过HTTP协议的GET和POST两种方法在Java ...注意,处理POST请求时,确保设置正确的字符编码,以避免中文乱码问题。
表单提交方法通常有两种:GET和POST。这两种方法的主要区别在于: - **GET**: - 数据附加在URL后面,可见于地址栏。 - 适合用于提交不敏感信息,如搜索查询。 - 数据长度有限制(一般不超过2KB)。 - **POST**...
- **超链接 `<a>`**:用于链接到其他页面或跳转到页面内部的锚点。 - `href`属性:链接目标的URL。 - `target`属性:指定在哪个窗口或框架打开链接。 - `_blank`:新窗口或新标签页。 - `_self`:当前窗口或框架...
List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("username", "admin")); formparams.add(new BasicNameValuePair("password", "123456")); ...
表单元素中,`<FORM>`定义表单,`action`指定处理表单数据的URL,`method`指定提交方法(通常是POST或GET),`maxlength`限制输入长度,`checked`表示复选框或单选框是否默认选中。`<SELECT>`创建下拉列表,`...
- 示例代码展示了如何通过`window.open()`传递参数,包括中文字符,并在目标页面使用JavaScript函数`getQuery()`获取这些参数。 7. **JavaScript与正则表达式**: - 正则表达式在`getQuery()`函数中用来匹配并...
实现中文字串截取无乱码的方法 可以使用`mb_substr()`函数来处理多字节字符集,避免截取过程中出现乱码。 **示例代码**: ```php $string = "你好世界"; $substring = mb_substr($string, 0, 2, 'utf-8'); echo $...
表单中GET与POST提交方法的区别 - **GET**:将表单数据附加到URL之后,以问号分隔并在浏览器的地址栏中可见。GET请求的数据会受到URL长度的限制(大约2K左右),并且不适合发送敏感信息,因为数据在URL中可见。 - ...
GET与POST提交方法的区别 GET和POST是HTTP协议中两种常用的请求方式,在Web开发中用于用户向服务器发送数据。主要区别在于: - **安全性**:GET方式通过URL传输参数,容易暴露敏感信息;而POST方式将数据放在请求...
- **知识点**:可以使用cURL或file_get_contents()函数来获取网页内容。 ### 18. 在HTTP1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可以用报名地址:上海市徐汇区番禺路868号(2分) - **状态...
其次,如描述中提到的,通过`window.location` JavaScript方法或者使用`location.href`进行页面跳转不会发送`Referer`。这是因为这些方式不是标准的HTTP请求,而是浏览器内部的页面重定向,它们不会更新浏览器的历史...
- `mysql_query('set NAMES utf8')`:这行代码设置数据库连接的字符集为UTF-8,确保在处理中文字符时不会出现乱码问题。 3. **HTML与PHP结合**: - 在`userListt.php`中,HTML表格用于显示用户信息列表,而PHP...
可以使用`$_SERVER['SCRIPT_FILENAME']`获取脚本的完整路径,使用`$_GET`或`$_POST`获取参数。 ### 27.如何修改SESSION的生存时间.(1分) 可以通过设置`ini_set('session.gc_maxlifetime', 1440)`来修改。 ### 28...