首页/文章/javascript

如何正确地使用encodeURI()对 URL 进行编码

2024-08-31
8893 分钟
...

如何正确地使用encodeURI()对 URL 进行编码

encodeURI() 方法详解

在 Web 开发中,处理 URL 时经常需要对 URL 进行编码,以确保 URL 的有效性和安全性。JavaScript 提供了 encodeURI() 方法来实现这一功能。本文将详细介绍 encodeURI() 方法,包括其语法、使用场景以及代码示例。

encodeURI() 方法概述

encodeURI() 方法用于对整个 URI 进行编码。它会对 URI 中的特殊字符进行编码,以便在网络上传输时不产生歧义。与 encodeURIComponent() 方法不同的是,encodeURI() 不会对 URI 中的特殊字符(如 :, /, ?, # 等)进行编码,因为这些字符在 URI 中有特定的语法意义。

语法:

encodeURI(uri)
  • 参数:

    • uri:要进行编码的 URI 字符串。
  • 返回值:

    • 编码后的 URI 字符串。

encodeURI() 的使用场景

  1. 构建查询字符串

    场景: 你需要将用户输入的查询字符串添加到 URL 中,并确保 URL 是有效的。

    示例代码:

    const baseUrl = 'https://example.com/search';
    const query = 'JavaScript 编码示例';
    const encodedQuery = encodeURI(query);
    const fullUrl = `${baseUrl}?query=${encodedQuery}`;
    console.log(fullUrl); 
    

    在这个示例中,encodeURI() 用于编码查询字符串部分,以便它可以安全地附加到 URL 中。

  2. 在动态 URL 中包含特殊字符

    场景: 你需要将包含特殊字符的动态数据(如路径参数)插入到 URL 中。

    示例代码:

    const baseUrl = 'https://example.com/profile';
    const userId = '用户123';
    const profileUrl = `${baseUrl}/${encodeURI(userId)}`;
    console.log(profileUrl); 
    

    这里,encodeURI()userId 中的特殊字符编码为百分号编码格式,以确保它可以正确地作为 URL 的一部分。

  3. 处理包含非 ASCII 字符的 URL

    场景: 你需要将非 ASCII 字符(如中文字符)包含在 URL 中。

    示例代码:

    const baseUrl = 'https://example.com/商品';
    const item = '中文商品';
    const itemUrl = `${baseUrl}/${encodeURI(item)}`;
    console.log(itemUrl); 
    

    在这个例子中,encodeURI() 将中文字符编码为百分号编码,以便它能够正确地嵌入到 URL 中。

encodeURI()encodeURIComponent() 的区别

  • encodeURI() : 用于编码整个 URI。它不会对 :/?# 等 URI 特殊字符进行编码,因为这些字符具有特定的语法意义。
  • encodeURIComponent() : 用于编码 URI 的某一部分(如查询字符串)。它会对所有非字母数字字符进行编码,包括 URI 特殊字符。

注: encodeURI 会替换所有的字符,但不包括以下字符

示例对比:

const uri = 'https://example.com/path?name=John Doe&age=25';


const encodedURI = encodeURI(uri);
console.log(encodedURI); 


const encodedURIComponent = encodeURIComponent(uri);
console.log(encodedURIComponent); 

如上所示,encodeURIComponent() 对所有的特殊字符进行编码,而 encodeURI() 则保持了 URI 的结构和语法。

总结

encodeURI() 是一个在构建和处理 URL 时非常有用的方法。它确保整个 URI 的有效性,尤其是在处理包含特殊字符或非 ASCII 字符的 URL 时。了解如何正确使用 encodeURI()encodeURIComponent() 可以帮助你创建更安全、有效的 Web 应用程序。

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
javascript2025-09-18
JavaScript 的多线程能力:Worker
如果你写过一些计算量稍大的 JavaScript 代码,比如图像处理、大量数据排序或者复杂的算法,你几乎肯定遇到过浏览器“卡死”的现象。点击页面没反应,动画也停了,就像整个世界都静止了。 这就是主线程被阻塞的典型后果。因为主线程既要负责执行 JavaScript,又要负责渲染页面、响应用户操作,一旦它被繁重的计算任务占满,就无暇顾及其他,用户体验便直线下降。 这个问题的根源,正是“主线程是单线程的”。那么,如何解决呢? 答案很简单:把这...
学习面试
javascript2025-09-10
手把手教你实现一个EventEmitter
你是不是也遇到过这种情况:代码里各种事件监听和触发,回调函数套了一层又一层,最后自己都理不清哪个事件先触发、哪个后触发了? 别担心,今天我就带你从零开始实现一个自己的事件触发器(EventEmitter),让你彻底掌握事件驱动的精髓,代码清晰度直接提升200%! 为什么要懂EventEmitter? 先说说为什么我们要关心这个。Node.js的核心就是事件驱动,比如文件读写、网络请求,都是通过事件来处理的。不会EventEmitter,...
学习面试
javascript2025-08-09
Web Worker 多线程魔法
你是否曾遇到过网页因为复杂计算而卡顿的情况?今天,让我们一起探索Web Worker的神奇世界,看看如何用多线程技术解决性能瓶颈,并实现流畅的图片压缩功能! 为什么需要Web Worker? 想象一下,你在一个繁忙的餐厅里,只有一位服务员(主线程)负责点餐、上菜、结账所有工作。当客人突然暴增时,这位服务员就会手忙脚乱,其他客人只能干等着… 这就是JavaScript的现状—— 单线程 !所有任务都在一个线程中排队执行,一旦遇到复杂计算(...
学习面试
javascript2025-08-07
🌐AST抽象语法树
AST 是前端开发中一个非常重要的概念,它就像是代码的“编译器”,能够帮助我们理解和操作代码。本文将深入探讨 AST 的原理和应用,带你从零开始了解 AST。 一、什么是 AST? AST(抽象语法树)是一种树形结构,用于表示程序代码的语法结构。它将代码分解为一系列的节点,每个节点代表代码中的一个元素,如变量、函数、表达式等。AST 是编译器和解释器的基础,也是代码分析和转换的关键工具。 1\. AST 的结构 AST 的结构通常包括以...
学习面试
javascript2025-08-05
打字机效果是如何实现的
分析效果 使用 AI 对话的时候,文字是一个字一个字蹦出来的?它不是等所有内容生成完毕后一次性展示,而是以一种流畅、实时的“打字机”效果呈现,这种体验的背后,隐藏着一种高效的Web技术。它就是 服务器推送事件(Server Sent Events,简称 SSE) 什么是 SSE 从根本上说,SSE 是一种允许服务器 单向 、 持续 地向客户端(浏览器)推送数据的Web技术。 可以把它想象成一个 电台广播 : 服务器 是广播电台,持续不断...
学习面试
javascript2025-08-04
Promise 从原理到实现
前言 是 异步编程的核心概念之一,它为我们提供了一种更优雅的方式来处理异步操作。 本文将全面剖析 的工作原理,并逐步实现一个符合 规范的 。 正文 一、Promise 基础概念 代表一个异步操作的最终完成(或失败)及其结果值。它有 种状态: 1. pending : ,既不是成功,也不是失败状态 2. fulfilled :意味着操作 完成 3. rejected :意味着操作 状态一旦改变就不能再变,只能从 变为 ,或从 变为 。 二...
学习面试

评论

请登录后发表评论

去登录
加载评论中...

目录