JavaScript 获取 URL 参数及解决中文乱码的两种实用方法

七月
七月
发布时间:2026-10-14| 4人浏览过
原创

在前后端交互或页面间跳转时,经常需要通过 URL 查询字符串(Query String)传递参数。由于浏览器默认对中文进行 URL 编码,接收方若未正确解码或使用不当的方法解析,极易出现中文乱码。本文将详细讲解如何利用 JavaScript 解析 URL 中的特定参数,并提供解决中文乱码的标准方案。

核心方法与代码实现

要获取 URL 中的参数,通常有两种主流做法:一种是编写函数利用正则表达式精确匹配目标参数;另一种是编写通用函数将整个查询字符串解析为对象,便于批量访问。以下分别展示这两种方法的实现逻辑。

第1步:使用正则分析法提取单个参数

目的:快速、安全地获取 URL 中指定名称的参数值,无需处理其他参数。 入口:定义一个全局 JS 函数。 动作:构建正则表达式匹配 ?key=value& 或 &key=value& 的模式。

以下是具体的代码实现:

function getQueryString(name) {
    // 构建正则:匹配边界符(&或开头)、参数名、等号、值(非&字符)、结束符(&或结尾)
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    // 从 window.location.search 中提取匹配项
    var r = window.location.search.substr(1).match(reg);
    
    // 如果匹配成功,返回捕获组[2](即值部分),否则返回 null
    if (r != null) {
        return unescape(r[2]);
    }
    return null;
}

重要参数说明:

  • window.location.search:获取 URL 中问号 ? 之后的部分,包含 ? 本身。
  • substr(1):去除开头的 ?。
  • unescape():将百分号编码的字符串还原为普通字符串。注意:在现代开发中,推荐使用 decodeURIComponent() 以更好地支持 UTF-8 字符集。

完成状态:调用 getQueryString("key") 即可直接得到该 key 对应的原始字符串值。


第2步:使用对象构造法批量解析参数

目的:一次性获取 URL 中的所有参数,并将它们存储在一个对象中,方便按索引或键值访问。 入口:定义 GetRequest 函数。 动作:截取 ? 后的字符串,按 & 分割成数组,再按 = 分割每个元素构建键值对。

function GetRequest() {
    var url = location.search; // 获取 url 中 "?" 符后的字串
    var theRequest = new Object(); // 创建空对象存储参数
    
    if (url.indexOf("?") != -1) { // 确保 URL 中存在参数
        var str = url.substr(1); // 去掉 '?'
        strs = str.split("&"); // 按 '&' 分割成键值对数组
        
        for(var i = 0; i < strs.length; i ++) {
            // 每个元素形如 "key=value",再次 split("=") 分离键和值
            // 同样需注意解编码过程
            theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
        }
    }
    
    return theRequest;
}

使用示例:

// 调用函数获取所有参数对象
var Request = new Object();
Request = GetRequest();

// 通过键名访问具体参数值
var param1 = Request['param1'];
var param2 = Request['param2'];
console.log(param1, param2); // 输出对应的参数值

解决中文乱码的关键:编码与解码

上述两种方法虽然能解析出参数的字符串形式,但如果参数中包含中文,且发送方没有进行正确的编码,或者接收方未做解码,就会出现乱码。解决这一问题的关键在于传参时编码和收参时解码的配合。

第3步:传参页的编码处理

在发起跳转或请求的页面(A 页面),构建 URL 时应使用 encodeURI() 对包含中文的值进行编码。这会将中文字符转换为 UTF-8 格式的十六进制编码。

function send() {
    var url = "test02.html";
    var userName = $("#userName").html(); // 假设这是获取到的中文用户名
    
    // 关键步骤:使用 encodeURI 对整个 URL 或仅对参数值进行编码
    // 推荐方式:单独编码值后拼接,或使用 encodeURIComponent
    var targetUrl = url + "?userName=" + encodeURIComponent(userName);
    
    window.open(targetUrl);
}

第4步:接收页的解码处理

在接收参数页面(B 页面),拿到 URL 字符串后,需使用对应的解码函数将编码还原为中文字符。decodeURIComponent() 是处理 encodeURIComponent 编码内容的最佳选择,比旧的 decodeURI 更安全且兼容性好。

<script>
    // 获取当前页面的完整 URL
    var urlinfo = window.location.href;
    
    // 拆分出 "?" 后的内容
    var queryString = urlinfo.split("?")[1];
    
    if(queryString) {
        // 继续拆分出 "=后面的参数值"
        var rawValue = queryString.split("=")[1];
        
        // 关键步骤:使用 decodeURIComponent 还原中文
        var userName = decodeURIComponent(rawValue);
        
        $("#userName").html(userName);
    }
</script>

总结与注意事项

  • 正则法 vs 对象法:如果需要频繁获取少量几个固定参数,建议使用正则法,性能稍好且代码简洁;如果需要遍历或动态获取参数,对象法更为灵活。
  • 解码函数选择:尽量避免使用 unescape,它已废弃且不支持 UTF-8。请统一使用 encodeURI/decodeURI(用于整个 URI 的简单编码)或 encodeURIComponent/decodeURIComponent(用于参数值的精确编码)。对于中文参数,强烈建议在后端或服务端进行标准的 URL Encoding,前端配合解码以确保万无一失。
  • 特殊字符处理:如果参数值中包含特殊符号(如空格、#、& 等),务必使用 encodeURIComponent 进行编码,以免破坏 URL 结构。

以上就是关于 JavaScript 获取 URL 参数及解决中文乱码的详细操作方法,更多关于前端 URL 解析技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。