问题源自于大傻同学的需求:A.html的参数传给B.html。必须是在B.html中用js代码来获取该url中的中文参数。。。
网上的类似问题:http://bbs.chinaunix.net/viewthread.php?tid=887933 未解决。
正常情况下,我们在后台获取request传递过来的中文参数都比较好处理。但是这哥们,是直接从html页面跳转到另一个html页面中,然后当另一个html加载完后运行js来获取当前的url中的中文参数。实际上浏览器在把参数传递过来的时候,已不在是中文了,而是%2F%B0%D9%B6%C8%BF%D5%BC%E4格式的字符串了。即使url中显示的是中文,使用window.location.search.substring(1)获取的字段也是类似于%2F%B0%D9%B6%C8%BF%D5%BC%E4的字符串。
显然到这一步为止,我们希望有一个js自带的函数把%2F%B0%D9%B6%C8%BF%D5%BC%E4这样的字符串解析了就行了。
实际上,确实存在这样的一个函数。哈哈哈,这样问题就解决了。先对中文进行编码,然后解码。
通过解决这个问题还学了不少js的东西。
1.js控制页面跳转的方法:
- 第一种:
- <script language="javascript">
- window.navigate("top.jsp");
- </script>
- 第二种:
- <script language="JavaScript">
- self.location='top.htm';
- </script>
- 第三种:
- <script language="javascript" type="text/javascript">
- window.location.href="login.jsp?backurl="+window.location.href;
- </script>
- 第四种:
- <script language="javascript">
- alert("返回上一页面");
- window.history.back(-1);
- </script>
- 第五种:
- <script language="javascript">
- alert("非法访问,请终止!");
- top.location='xx.jsp';
- </script>
2.中文参数的编码和解码
http://www.w3school.com.cn/js/jsref_escape.asp
3.javascript解析url参数【把参数分离解析出来而已】
- <script type="text/javascript">
- var LocString=String(window.document.location.href);
- function getQueryStr(str){
- var rs = new RegExp("(^|)"+str+"=([^/&]*)(/&|$)","gi").exec(LocString), tmp;
- if(tmp=rs){
- return tmp[2];
- }
- // parameter cannot be found
- return "";
- }
- console.log(getQueryStr("parameter_name"));
- </script>
4.常识
Jsp页面使用URL编码传递中文参数的情况下,在参数的解析过程中会出现乱码。由于java在设计的时候考虑到了国际化的问题, 在java源程序编译成字节码的时候默认使用的是UTF-8编码。而在web运用上,由于不同的浏览器向服务器发送的信息采用的编码 方式不同,在由像tomcat之类的服务器解码的时候会由于编码方式的不同而产生乱码,这是一个会困扰jsp初学者很久的问题。 【http://www.360doc.com/content/10/0317/10/633992_19086741.shtml】 下角同学问题的解决的Demo: A.html
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>test1</title>
- <script type="text/javascript">
- function c(){
- var t= document.form1.t.value;
- console.log(t);
- console.log(escape(t));
- console.log(unescape(t));
- self.location='xiajiao2.html?t='+escape(t);
- }
- </script>
- </head>
- <body>
- <form id="form1" name="form1" action="xiajiao2.html" method="get">
- <input type="text" id="t" name="t" />
- <input type="button" onclick="return c()" value="搜索" />
- <br />
- 中国人
- </form>
- </body>
- </html>
B.html
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script language="javascript" type="text/javascript" src="static/login_scr/jquery-1.3.2.js"></script>
- <title>test2</title>
- <script type="text/javascript">
- var LocString=String(window.document.location.href);
- function getQueryStr(str){
- var rs = new RegExp("(^|)"+str+"=([^/&]*)(/&|$)","gi").exec(LocString);
- var tmp;
- if(tmp=rs){
- return tmp[2];
- }
- return "";
- }
- $(document).ready(function() {
- console.log(unescape(getQueryStr("t")));
- alert(unescape(getQueryStr("t")));
- // var t=window.location.search.substring(1);
- });
- </script>
- </head>
- <body>
- 中国人
- <!--<form id="form1" action="xiajiao2.html" method="get">
- <input type="submit" onclick="return check_register()" value="搜索" />
- </form>-->
- </body>
- </html>