用jsp写的网页 怎么在传递参数时包含中文?
用jsp写的网页 怎么在传递参数时包含中文?
jsp中 <%@ page contentType="text/html;charset=gb2312" %> <a href="CartServlet?action=search&cname=<%= st %>"><%= st %></a> 在Servelt中 request.setCharacterEncoding("gb2312"); response.setContentType("text/html;charset=gb2312"); response.setCharacterEncoding("gb2312"); String cname = request.getParameter("cname"); 拿到的cname是一堆乱码? 怎么解决?谢谢了》、?最好不用过滤器~
精彩回答
2011-06-21 18:29
request.setCharacterEncoding设置了用gb2312去转码了,这里是不会有什么问题的;关键看看你的页面.. 页面用的是超链接,超链接采用的是get的方式进行请求,而参数部分如何发送给服务端取决于浏览器及相关设置: IE中uri使用UTF8进行转义,后半部分用UTF8编码 FireFox则使用页面编码进行转义 所以你试试在FireFox打开看看,是否可以正常获取了? 彻底解决问题的话,超链接的uri和参数部分不要直接带中文 在cname=<%= st %>"> 里面的st先编码一下 st = URLEncoder.encode(st,"gb2312"); ---转变为%&*&(^&这种不可读的东西,查看页面源代码也可以看到。 此后浏览器发送请求时进行编码转义将不会做任何处理(不存在中文等特殊字符),于是服务端可以得到正确的gb2312转义过的字符信息了。
- 追问
-
哦 我这个在Servelt中 使用cname 来构建sql语句 结果cname是 %CB%AE%B9%FB 而 mysql用的是GB2312 那能不能吧那一堆乱码转换回中文呢? 刚开始学jsp到处是问题~~谢谢了哈
- 回答
-
这堆不是乱码,是转义后的编码; 转回中文也类似的做法:URLDecoder.decode(str,"gb2312")
- 提问者评价
-
万分感谢~
评论|1
按默认排序|按时间排序
其他2条回答
get取中文很多时候都会出现中文乱码的,一个笨方法不用get,所有值用表单提交,这种是绝对不会出现中文乱码的,给你的例子 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test</title> </head> <body> <form name="frm"> <input type="hidden" name="test1" /> <input type="hidden" name="test2" /> </form> <a href="javScript:down('测试1','测试2');" >【测试】</a> </body> </html> <script type="text/javaScript" language="javaScript"> function down(obj1,obj2){ document.getElementByName("test1").value=obj1; document.getElementByName("test2").value=obj2; document.frm.method="post"; document.frm.action="<%=basePath + "test.do"%>"; document.frm.submit(); } </script>
评论|0
传之前先转换下参数的编码st=URLEncoder.encode(st,"gb2312");