使用正则表达式获取url中的中文参数值出现乱码问题

来源:互联网 发布:java 自然语言 编辑:程序博客网 时间:2024/06/05 04:21

今天在使用网上的方法获取url中中文参数时出现了乱码,如下图所示:


获取参数方法:

<script> function getUrlParam(name) {  var reg = new RegExp("(^|&)" + "user" + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象  var r = window.location.search.substr(1).match(reg);  //匹配目标参数   if (r != null) return r[2]; //返回参数值    }  </script>

解决方案:

<script> function getUrlParam(name) {  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象  var r = window.location.search.substr(1).match(reg);  //匹配目标参数   if (r != null) return decodeURIComponent(r[2]); elsereturn null; //返回参数值    }  </script>

知识点解析:

正则表达式

RegExp("(^|&)" + 'user' + "=([^&]*)(&|$)")

RegExp 正则表达式
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

window.location.search

截取当前url中“?”后面的字符串

substr

定义和用法:substr() 函数返回字符串的一部分。
注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
语法:substr(string,start,length)
参数描述
string必需。规定要返回其中一部分的字符串。
start必需。规定在字符串的何处开始。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾开始的指定位置开始
0 - 在字符串中的第一个字符处开始
length
可选。规定被返回字符串的长度。默认是直到字符串的结尾。
正数 - 从 start 参数所在的位置返回的长度
负数 - 从字符串末端返回的长度

decodeURIComponent()函数

unescape() 函数可对通过 escape() 编码的字符串进行解码。
该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。
ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。

参考内容:

http://www.jb51.net/article/19850.htm

https://segmentfault.com/q/1010000003039352

0 0