300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > js获取当前url地址参数中文乱码问题

js获取当前url地址参数中文乱码问题

时间:2022-06-22 18:00:48

相关推荐

js获取当前url地址参数中文乱码问题

不知道从什么时候起,百度出来的回答大部分都是博客园的文章了,就拿本章的问题查找的答案来说,内容大部分没区别,而且所答非所问,明明帖子的问题是url地址栏的中文乱码问题,但是回答的都什么云里雾里的,复制粘贴也不粘点质量高的。

项目中的页面跳转后获取url参数的问题,因为是抽取出来的放到独立页面上的模块,貌似没办法用 angular 本身自带的 $stateParams 来获取跳转携带参数,只能通过当前页面的url获取,window.location.href 。

项目中支持通话列表表格内容单项双击跳转打开新页面,后来抽出独立页面也支持了url地址栏直接输入接口跟参数直接跳转,参数也有中文情况,传输中文时遇到了点小问题:前台底层获取的url的中文是乱码。

开始以为是后台请求接口时,中文参数转码有问题,前台是有封装一个获取并整理url参数到一个对象的方法的,输出后的对象中对应中文的属性值完全是乱码,怎么办呢?解吧,decodeURI,没解开。后来看封装好的获取参数整理成一个对象的方法时,发现了问题,居然将获取的值进行了两次转码,好坑呀~

这里记录一下前台解析url整理成对象的方法。

//首先获取到当前页面的地址栏信息var url = window.location.href;console.log(url);var obj = {};var reg = /\?/;if(url.match(reg)) {//判断传入参数,以问号截取,问号后是参数var chars = url.split('?')[1];//再截&号var arr = chars.split('&');//获得截取后的数组为键值对字符串for (var i = 0; i < arr.length; i++) {//保守一点确定看是否为 name=value形式var num = arr[i].indexOf("=");if (num > 0) {//拼接字符串var name = arr[i].substring(0, num);var value = arr[i].substr(num + 1);//拼接对象,并转码obj[decodeURIComponent(name)] = decodeURIComponent(value);}}}console.log(obj);

最后存储对象属性时,可以不对 name 进行转码,因为一般 name 都为 key 值,通过使用 key 来获得其对应的 value ,所以 value 的值才是广泛的多样的,会有中文值的可能,但是估计不会有后台将 key 值也存成中文,谁见过键值对中 key 是用中文来使用的?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。