我在url中想传汉字到后台中,前台js
var url = 'login.do?method=test&name=测试';
var encodeUrl=encodeURI(url);
window.open(encodeUrl);后台action类中URLEncoder.encode(laf.getName(), "UTF-8")进行解码,可是去不到我传入的参数。在actionform中的name也是乱码。请问该如何解决编码问题
var url = 'login.do?method=test&name=测试';
var encodeUrl=encodeURI(url);
window.open(encodeUrl);后台action类中URLEncoder.encode(laf.getName(), "UTF-8")进行解码,可是去不到我传入的参数。在actionform中的name也是乱码。请问该如何解决编码问题
因为, 我在firefox试过, 发现: encodeURI(url) 函数 和 html 的charset
有关系, 如果不指定, 好像用的是 8859-1/gb2312编码, 不是 utf-8, 比如:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
....
</html>加上这个后再看看 laf.getName() 是不是正确的数据
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录</title>
</head>
<script type="text/javascript">
function a(){
alert("enter the a!");
var name="zhanghai";
//window.test.action="login.do?method=test&name="+name;
//window.test.submit();
var url = 'login.do?method=test&name=测试';
var encodeUrl=encodeURI(url);
var enUrl=encodeURIComponent(url);
alert(encodeUrl);
alert('enUrl='+enUrl);
alert('enUrl22='+decodeURIComponent(enUrl));
window.open(encodeUrl);
}
</script>
<body>
<h1>用户登录</h1>
<hr>
<form action="login.do?method=test" method="post" id="test">
用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="button" value="登录" onclick="a()">
</form>
</body>
</html>
取值时用语句java.net.URLDecoder.decode(param);再转回中文
b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
<Connector
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
<!--在里边加上这个参数-->
URIEncoding="gb2312"
/>简单示例程序如下:<%@ page contentType="text/html;charset=gb2312" %><a href="ds.jsp?url=<%=java.net.URLEncoder.encode("编码的是这里","GB2312")%>">点击这里</a>
<%
//request.setCharacterEncoding("GBK");
if(request.getParameter("url")!=null)
{str=request.getParameter("url");
str=java.net.URLDecoder.decode(str,"GB2312");
str=new String(str.getBytes("ISO-8859-1"));
out.print(str);
}%>JSP经过上面的处理之后,最后输出的HTML页面联结已经可以正常向服务器传递中文参数了。下面我们阐述一下Servlet里怎么接收/解析中文参数。对于<a href="/someServlet?key=%E4%BD%A0%E5%A5%BD">你好</a>之类的联结,我们可以用下面的servlet来解析传递过来的中文参数。
GetAsiaCharServlet.javaview plaincopy to clipboardprint?
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetAsiaCharServlet extends HttpServlet {
@Override
//redir?key=xxxx
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String key = req.getParameter("key");
key = <SPAN style="COLOR: #ff0000">new String(key.getBytes("ISO-8859-1", "utf-8"))</SPAN>;
System.out.println(keyword);
//...
//重定向处理
//res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));
}
} import java.io.IOException;
import java.net.URLEncoder;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetAsiaCharServlet extends HttpServlet {
@Override
//redir?key=xxxx
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String key = req.getParameter("key");
key = new String(key.getBytes("ISO-8859-1", "utf-8"));
System.out.println(keyword);
//... //重定向处理
//res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));
}
}我们注意到使用req.getParameter("key")得到参数后,还使用了new String(key.getBytes("ISO-8859-1", "utf-8"))把ISO-8859-1字符集形式转换成UTF-8形式。
为什么呢?因为iso-8859-1是Java中网络传输使用的标准字符集,req.getParameter("key")得到的还是ISO-8859-1字符集,所以要转换一下才不会是乱码。最后,顺便提一下,采用servlet重定向时,也需要对包含中文文字的参数做特殊处理。
例如,SERVLET从HTML页面的联结接受参数,然后重新定向到Google搜索。
则可以在上面的GetAsiaCharServlet里加上如下处理:
res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key, "utf-8"));也就是说,需要把参数取出来,转换,再重新使用URLEncoder.encode编码,这样就不会出现乱码现象。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wjtzlj/archive/2009/04/27/4128790.aspx
var url = 'login.do?method=test&name='+encodeURI("测试");
window.open(url );
<Connector enableLookups="false" port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>这样的,就可以了。屡试不爽。
或者
name=new String(name.getBytes("ISO-8859-1"),"utf-8");
试试~~~~~~
http://blog.csdn.net/crazylaa/archive/2009/12/24/5066784.aspx