我做搜索的时候 用户输入的参数是 中文 那么就要编码了、
现在 比如 用输入的 "劳"
我先用js来做一些判断如:
<script type="text/javascript">
function aa(){
var key= document.getElementById("key").value;
key = encodeURI(key); //编码一次
key=encodeURI(key); //编码两次
if(key.replace(/\s/ig,'')==""){
alert("请输入关键字");
}else{
window.location.href="infoAction!shousuo.dhtml?key="+key;
}
}
</script>
<form>
<input type="text" class="text2" name="key" id="key"/>
<img type="buttion" class="btn" onclick="aa()" value="搜索">
</form>
经过两次编码 "劳"字变成:%25E5%258A%25B3
被传入到action中,然后action中转码:
String key1=super.getParameter("key");
String key= java.net.URLDecoder.decode(key1,"utf-8");//转码
request.setAttribute("key", key);//设置到作用域 传入到下一页面我测试过了:这样子得到的 是对的 是"劳"字
关键的在下面:
我搜索完了后 到一个呈现页面 分页显示 搜索出来的信息
那么在做分页的时候,假如有下一页,那么这个关键字也必须传给action 如:
<a href="infoAction!shousuo.dhtml?pageNo=${requestScope.pageNo+1 &key=${pageScope.key2}" >下一页</a>
这里的key=${pageScope.key}自然就改是 "劳"字编码后的 应该是:%25E5%258A%25B3
为了达到这个目的我在jsp页面使用如下java代码:
<%
String key1=(String)request.getAttribute("key");
String key2=java.net.URLEncoder.encode(key1);//编码一次;
pageContext.setAttribute("key2",key2);
%>
我用getAttribute("key");参数得到是"劳"字但是不管我下面用java.net.URLEncoder.encode(key1);编码一次得到:%C0%CD于是我编码两次又得到:%25C0%25CD。始终都得不到:%25E5%258A%25B3 。
这是问题1下面是问题2
后来也不知道为什么就改为如下:
<%
String key1=(String)request.getParameter("key");
String key2=java.net.URLEncoder.encode(key1);//编码一次;
pageContext.setAttribute("key2",key2);
%>
这样子我得到的key1既然不是劳而是:%E5%8A%B3
这样子编码一次 也就是key2就变成了:%25E5%258A%25B3
这样子高兴了一下,认为得到了自己想要的结果。结果我用火狐一试:
我点击下一页:结果&key=${pageScope.key2} 这里的key却是:%E5%8A%B3。而不是:%25E5%258A%25B3
我换用ie 点击下一页:结果&key=${pageScope.key2} 这里的key又是:%25E5%258A%25B3 看了半天 实在没有弄明白 ,对于问题1和问题2
请教高手解答。
现在 比如 用输入的 "劳"
我先用js来做一些判断如:
<script type="text/javascript">
function aa(){
var key= document.getElementById("key").value;
key = encodeURI(key); //编码一次
key=encodeURI(key); //编码两次
if(key.replace(/\s/ig,'')==""){
alert("请输入关键字");
}else{
window.location.href="infoAction!shousuo.dhtml?key="+key;
}
}
</script>
<form>
<input type="text" class="text2" name="key" id="key"/>
<img type="buttion" class="btn" onclick="aa()" value="搜索">
</form>
经过两次编码 "劳"字变成:%25E5%258A%25B3
被传入到action中,然后action中转码:
String key1=super.getParameter("key");
String key= java.net.URLDecoder.decode(key1,"utf-8");//转码
request.setAttribute("key", key);//设置到作用域 传入到下一页面我测试过了:这样子得到的 是对的 是"劳"字
关键的在下面:
我搜索完了后 到一个呈现页面 分页显示 搜索出来的信息
那么在做分页的时候,假如有下一页,那么这个关键字也必须传给action 如:
<a href="infoAction!shousuo.dhtml?pageNo=${requestScope.pageNo+1 &key=${pageScope.key2}" >下一页</a>
这里的key=${pageScope.key}自然就改是 "劳"字编码后的 应该是:%25E5%258A%25B3
为了达到这个目的我在jsp页面使用如下java代码:
<%
String key1=(String)request.getAttribute("key");
String key2=java.net.URLEncoder.encode(key1);//编码一次;
pageContext.setAttribute("key2",key2);
%>
我用getAttribute("key");参数得到是"劳"字但是不管我下面用java.net.URLEncoder.encode(key1);编码一次得到:%C0%CD于是我编码两次又得到:%25C0%25CD。始终都得不到:%25E5%258A%25B3 。
这是问题1下面是问题2
后来也不知道为什么就改为如下:
<%
String key1=(String)request.getParameter("key");
String key2=java.net.URLEncoder.encode(key1);//编码一次;
pageContext.setAttribute("key2",key2);
%>
这样子我得到的key1既然不是劳而是:%E5%8A%B3
这样子编码一次 也就是key2就变成了:%25E5%258A%25B3
这样子高兴了一下,认为得到了自己想要的结果。结果我用火狐一试:
我点击下一页:结果&key=${pageScope.key2} 这里的key却是:%E5%8A%B3。而不是:%25E5%258A%25B3
我换用ie 点击下一页:结果&key=${pageScope.key2} 这里的key又是:%25E5%258A%25B3 看了半天 实在没有弄明白 ,对于问题1和问题2
请教高手解答。
decode(String s) 已过时。 结果字符串可能因平台默认编码不同而不同。因此,改用 decode(String,String) 方法指定编码;
encode
public static String encode(String s,
String enc)
throws UnsupportedEncodingException使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。
注:World Wide Web Consortium Recommendation 声明应使用 UTF-8。如果不使用该编码,可能造成不兼容性。
参数:
s - 要转换的 String。
enc - 所支持的字符编码名称。
返回:
已转换的 String。
抛出:
UnsupportedEncodingException - 如果不支持指定的编码
............
这个肯定可以。
我还真没见过传个值都这么转来转去的,看着都疯了
<script type="text/javascript">
function aa(){
var key= document.getElementById("key").value;
if(key.length==0){
alert("请输入关键字");
}else{
window.location.href="infoAction!shousuo.dhtml?key="+key;
}
}
</script>
后台这样
request.setCharacterEncoding("utf-8");
String key=request.getParameter("key");
if(StringUtils.isNotBlank(key))
key= new String(key.getBytes("ISO-8859-1"),"UTF-8");
这样得到的是中文的 不会乱码
你需要翻页所以存到request.setAttribute("key",key)
需要翻页的页面直接取值
<a href="infoAction!shousuo.dhtml?pageNo=${requestScope.pageNo+1 &key=${key}" >下一页</a>
这样传到后台在处理 用上面的方法
其实只要编码保持一致肯定就不会出现乱码问题。
首先数据库编码比如设置成UTF-8
工程编码设置成UTF-8。
在开发工具中设置jsp的编码格式为UTF-8。
这样基本就不会有什么问题。
在可以添加个字符的过滤器。