很奇怪的中文问题,在js中有中文,然后用location去传到另一页,接受后让我吃惊

yzxasd 2003-10-17 09:55:39
有这样的一段js:
searchcondition = "我我我我"
strslo='resbrowse.do?yzxurl=yzxurl&nodeid='+nodeid+'&nodepath='+nodepath+'&searchparameter='+searchcondition;
//strslo=escape(strslo);
parent.rightFrame.location="jump.jsp?loc=" + strslo

然后我在jump.jsp接受loc时,得到的竟然是“resbrowse.do?yzxurl=yzxurl”

我在接收页加了request.setCharacterEncoding("GBK");,也是一样的
...全文
43 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzxasd 2003-10-20
  • 打赏
  • 举报
回复
请问alexsten(小毅):那为什么参数中只要没有中文关键字就不会有这个问题,例如我在searchcondition中只有英文,就不会有这种情况,所有参数都能正常
alexsten 2003-10-20
  • 打赏
  • 举报
回复
不好意思,我测试了一下用##会有问题的,当初(##)是随口说说的
我是用中文的α来代替&,测试通过
你可以用其他的字符替代

测试环境win2003 + tomcat tomcat-4.1.27 + IE 6
测试代码:
=========================
a.htm

<html>
<script>
function test()
{
var nodeid = 1;
var nodepath = 1;
var searchcondition = "我我我我";
//这里已经用α来代替test.jsp中的&
var strslo = "test.jsp?yzxurl=yzxurlαnodeid=" + nodeid + "αnodepath=" + nodepath + "αsearchparameter=" + searchcondition;
var newUrl = "jump.jsp?loc=" + strslo;
self.location = newUrl;
}
</script>
<body>
<form>
<input type="button" value="test" onclick="test();">
</form>
</body>
</html>

=========================
jump.jsp

<%@ page contentType="text/html;charset=GB2312" %>
<%
String newUrl = request.getParameter("loc");
newUrl = new String(newUrl.getBytes("ISO-8859-1"),"gb2312");
out.println(newUrl);
%>


这里是运行结果:
test.jsp?yzxurl=yzxurlαnodeid=1αnodepath=1αsearchparameter=我我我我

然后再把α转化为&,在server side再response.sendRedirect(newUrl);
就这样了
alexsten 2003-10-20
  • 打赏
  • 举报
回复
我前面提的方法肯定能解决这个问题
我也做过跟你类似的功能,不过我没试过数据带中文就是了
alexsten 2003-10-20
  • 打赏
  • 举报
回复
不会吧?
在QueryString里面,所有的&的都当成是一个变量
你换成英文后难道取到的loc是后面的一整串?不可能吧?

你构造后的jump.jsp带的就是?loc=xxxx&a=A&b=B&c=C
a、b、c都是变量了,loc取到的只能是下一个&的之前的数据
难道你取到的loc变量是xxxx&a=A&b=B&c=C?

Ukyome 2003-10-17
  • 打赏
  • 举报
回复
试试把request.setCharacterEncoding("GBK");改为request.setCharacterEncoding("GB2312");我一直都是这么写的;
alexsten 2003-10-17
  • 打赏
  • 举报
回复
这个是粗心造成的,和编码没有任何关系
嘿嘿,因为我也犯过这样的错误,HOHO
alexsten 2003-10-17
  • 打赏
  • 举报
回复
这有什么奇怪的
当"jump.jsp?loc=" + strslo会什么结果呢?
jump.jsp?loc=resbrowse.do?yzxurl=yzxurl
&nodeid='+nodeid+'&nodepath='+nodepath+'&searchparameter='+searchcondition;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
类似这样了,懒得去改url里面的细节了
那对于jump.jsp来说,上面打“^”地方都成了jump.jsp的queryString了
所以当你去取loc的时候,当然只有到“resbrowse.do?yzxurl=yzxurl”了

所以,解决方法如下:
先把strslo='resbrowse.do?yzxurl=yzxurl&nodeid='+nodeid+'&nodepath='+nodepath+'&searchparameter='+searchcondition;里面的“&”改成其他的特殊符号,比如“##”
这样jump.jsp得到loc的数据就是完整的strslo的数据
只是所有的“&”变成了“##”
在server side再把loc中的“##”再恢复成“&”
那一切不都OK了?
yzxasd 2003-10-17
  • 打赏
  • 举报
回复
up

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧