js对url网页地址中文乱码问题的处理方法
2012-09-19 11:21
766 查看
先看例子:
有这么一个网页地址:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=不等式的解法(分析法、综合法、比较法).
当我们直接复制网址内容到其他地方看,就会变成:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=%E4%B8%8D%E7%AD%89%E5%BC%8F%E7%9A%84%E8%A7%A3%E6%B3%95%EF%BC%88%E5%88%86%E6%9E%90%E6%B3%95%E3%80%81%E7%BB%BC%E5%90%88%E6%B3%95%E3%80%81%E6%AF%94%E8%BE%83%E6%B3%95%EF%BC%89。
这个就是因为浏览器对url路径默认编码了。而且,不同的浏览器对url的编码是不一样的。
这个只是表象。问题不是这个,问题是在我们去取kname值的时候,得到的就是后面那一大串乱七八糟的东西。这样,我们就不能在程序里面做后续操作了。
怎么办呢?
现在我就直接告诉大家处理问题的办法,可能我的处理方法对你遇到的问题不能解决,但是至少能解决我出的这个问题。那就写出来跟大家分享下:
1,首先,在传地址的时候就先转码:
我的代码中是这样的:
request方法是我写的取地址中的参数的方法,decodeURI()方法就是将传递方故意转码的中文又解码。decodeURI()和encodeURI()两个方法一边用一个,但是不能用反了。
但是,上面的方法是不兼容IE的,只能是火狐下没问题,ie就会显示成:encodeURI(我的考试)。怎么办呢?呵呵,给答案吧:
在传递端不要用encodeURI()函数,其他地方不变。就这么简单。
that is OK!就这么简单。
有这么一个网页地址:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=不等式的解法(分析法、综合法、比较法).
当我们直接复制网址内容到其他地方看,就会变成:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=%E4%B8%8D%E7%AD%89%E5%BC%8F%E7%9A%84%E8%A7%A3%E6%B3%95%EF%BC%88%E5%88%86%E6%9E%90%E6%B3%95%E3%80%81%E7%BB%BC%E5%90%88%E6%B3%95%E3%80%81%E6%AF%94%E8%BE%83%E6%B3%95%EF%BC%89。
这个就是因为浏览器对url路径默认编码了。而且,不同的浏览器对url的编码是不一样的。
这个只是表象。问题不是这个,问题是在我们去取kname值的时候,得到的就是后面那一大串乱七八糟的东西。这样,我们就不能在程序里面做后续操作了。
怎么办呢?
现在我就直接告诉大家处理问题的办法,可能我的处理方法对你遇到的问题不能解决,但是至少能解决我出的这个问题。那就写出来跟大家分享下:
1,首先,在传地址的时候就先转码:
我的代码中是这样的:
<a href="http://www.17xmf.com/index.php?act=exercises&kd=22&kname=encodeURI(我的考试)">我的考试</a>2.在接收端,我的接收端是js,所以就用js的办法了,如果是php或者其他语言接收,就再查找下网上资料吧。不过思路应该不会变,变的是处理的函数应该用php的了。
var kname = request('kname'); kname = decodeURI(kname); /** * @author gayayang * @date 2012-9-18 * @todo 将url的get参数取出来 * @param url * @returns */ function request(paras){ var url = location.href; var paraString = url.substring(url.indexOf("?")+1,url.length).split("&"); var paraObj = {}; for (var i=0; j=paraString[i]; i++){ paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length); } var returnValue = paraObj[paras.toLowerCase()]; if(typeof(returnValue)=="undefined"){ return ""; }else{ return returnValue; } }
request方法是我写的取地址中的参数的方法,decodeURI()方法就是将传递方故意转码的中文又解码。decodeURI()和encodeURI()两个方法一边用一个,但是不能用反了。
但是,上面的方法是不兼容IE的,只能是火狐下没问题,ie就会显示成:encodeURI(我的考试)。怎么办呢?呵呵,给答案吧:
在传递端不要用encodeURI()函数,其他地方不变。就这么简单。
that is OK!就这么简单。
相关文章推荐
- Node.js抓取中文网页乱码问题和解决方法
- js常用方法总结-url中文乱码问题
- Node.js抓取中文网页乱码问题和解决方法
- 解决js URL参数中文乱码的问题
- 用字符编码处理中文乱码问题,js向action中传值时
- 解决JS在url中传递参数时参数包含中文乱码的问题
- URL地址传递中文乱码解决方法
- action接收到来自jsp页面的请求时出现中文乱码问题处理方法
- JS中的的Url传递中文参数乱码,如何获取Url中参数问题
- HttpUrlConnection post方法传递中文乱码问题
- Linux下一系列基于Java的客户端程序的中文乱码问题的处理方法
- 解决get方法传递URL参数中文乱码问题
- js通过url向后台传值中文乱码问题
- 解决get方法传递URL参数中文乱码问题
- jQuery中getScript方法引入外部js文件,乱码处理(自己遇到的问题)
- Python requests库解析中文网页乱码处理方法
- URL链接中文参数乱码的若干处理方法
- js 获取url 参数 中文乱码问题
- URL中文参数乱码问题解决方法!
- 解决get方法传递URL参数中文乱码问题