深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例

深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例

在JavaScript中,编码与解码字符串是非常常见的操作。对于URL、HTML等特殊字符的处理,我们通常会使用escape()、encodeURI()、encodeURIComponent()这几个函数,它们虽然都是编码函数,但是处理的范围和方式各不相同。

escape()

escape()函数可以编码字符串中的非ASCII字符,例如中文、日文、朝鲜文等,它使用16进制序列表示每个字符,并在前面加上%作为前缀;对于ASCII字符,它不会进行编码。需要注意的是,由于escape()函数使用的是16进制序列,对于单层URL编码,它并不适用。此外,该函数已经被废弃,推荐使用encodeURIComponent()替代。

例子1

escape('hello, 世界')
// 返回 "hello%2C%20%E4%B8%96%E7%95%8C"

encodeURI()

encodeURI()函数主要用于编码URL中的特殊字符,例如空格、&、=等。它可以对除ASCII字母和数字(A-Za-z0-9)以及特殊字符$-_.+!*'()以外的字符进行编码,使用%转义字符,将非英文字母与数字的字符编码为URI格式。需要注意的是,它并不会对完整的URL进行编码,例如:http://www.example.com/dir1/#hash1 和 http://www.example.com/dir2/#hash2 是两个不同的URL,而encodeURI()只会编码其中的特殊字符,例如:http://www.example.com/dir1/#hash1 会被编码为 http://www.example.com/dir1/#hash1 ,而不会变成 http%3A%2F%2Fwww.example.com%2Fdir1%2F%23hash1。

例子2

encodeURI('http://www.example.com/q?name=石子峻&age=18')
// 返回 "http://www.example.com/q?name=%E7%9F%B3%E5%AD%90%E5%B3%8C&age=18"

encodeURIComponent()

encodeURIComponent()函数相对于encodeURI()更为严格,它除了对ASCII字母和数字不进行编码外,会对其他所有字符进行编码(只有RFC2396定义中未保留的字符才会被编码),即它会将所有的特殊字符、汉字等都进行编码,并使用%进行替换。因此,在编码过程中应该优先考虑encodeURIComponent()。

例子3

encodeURIComponent('http://www.example.com/q?name=石子峻&age=18')
// 返回 "http%3A%2F%2Fwww.example.com%2Fq%3Fname%3D%E7%9F%B3%E5%AD%90%E5%B3%8C%26age%3D18"

总结

escape()、encodeURI()和encodeURIComponent()都是JavaScript中用于编码字符串的函数。其中,escape()已经被废弃,而encodeURI()主要用于编码URL中的特殊字符,encodeURIComponent()则更为严格,除了对ASCII字母和数字不进行编码,会对其他所有字符进行编码,并使用%进行替换。我们使用这些编码函数可防止出现编码不正确从而导致的各种莫名其妙的错误。需要根据具体的需求来选择使用哪一个函数进行编码。

例子4

比如一个提交表单的时候需要对参数进行编码,可以使用encodeURIComponent()来确保参数的正确性。示例代码如下:

// 假设表单中有两个参数name和age,需要提交到后端
const name = document.querySelector('#name').value // 假设name值为"张三"
const age = document.querySelector('#age').value // 假设age值为18
const url = `http://www.example.com/api?name=${encodeURIComponent(name)}&age=${encodeURIComponent(age)}` // 对name和age进行encodeURIComponent()编码
fetch(url)
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err))

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JS数组去掉重复数据只保留一条的实现代码

    下面是“JS数组去掉重复数据只保留一条”的实现攻略: 基本思路 可以通过遍历数组,使用对象的属性进行判断,来去掉重复数据。 实现代码 function removeDuplicates(arr){ var obj = {}, newArr = []; for(var i = 0; i < arr.length; i++){ if(!obj[arr[i]…

    JavaScript 2023年6月11日
    00
  • JavaScript自定义超时API代码实例

    让我来详细讲解“JavaScript自定义超时API代码实例”的攻略。 简介 JavaScript 是一种非常强大的脚本语言,它可以在网页上实现丰富的交互效果。但是,在某些特定的场景中,我们需要实现一些异步操作,然而又需要限制它的执行时间,这个时候就需要使用超时 API 来解决了。JavaScript 提供了一个超时机制,我们可以在一段时间内等待一个异步操作…

    JavaScript 2023年6月11日
    00
  • js简单时间比较的方法

    首先,我们需要明确需求:在前端页面中,实现两个时间的比较,判断哪一个时间是更早或更晚。具体思路是将两个时间字符串转换成Date对象,然后比较两个Date对象的时间戳大小。 以下是具体实现步骤和示例说明: 步骤一:将时间字符串转换成Date对象 我们可以借助JS内置的Date对象来实现时间字符串到Date对象的转换,具体代码如下: let timeStr = …

    JavaScript 2023年5月27日
    00
  • 微信小程序动画组件使用解析,类似vue,且更强大

    微信小程序动画组件使用解析攻略 微信小程序提供了丰富的动画组件,通过这些动画组件可以轻松实现丰富、生动的交互效果。本文将详细讲解微信小程序动画组件的使用方法。 基础动画 微信小程序提供了基础的动画效果,包括位置移动、缩放、旋转、透明度改变等。 位置移动 位置移动通过translate()方法来实现,具体用法如下: // 创建一个动画实例 const anim…

    JavaScript 2023年6月11日
    00
  • 浅谈JavaScript函数节流

    浅谈 JavaScript 函数节流 函数节流(throttle)是一种优化高频执行函数的方法,它可以确保一定时间间隔内只执行一次函数。在一些需要触发频率比较高的事件,比如页面滚动、鼠标拖拽等事件中,使用函数节流可以有效提升页面性能。 基本实现原理 函数节流的基本实现原理是设置一个定时器,再限定在指定的时间内只触发一次函数。如果在等待的时间内再次触发函数,就…

    JavaScript 2023年5月19日
    00
  • JavaScript实现网页带动画返回顶部的方法详解

    JavaScript实现网页带动画返回顶部的方法详解 当我们浏览很长的网页时,我们会发现有时候需要快速回到页面的顶部。通常,我们可以直接点击页面的滚动条或者键盘的 Home 键,但这种方式比较突兀。另外,很多时候我们需要一个能够流畅返回顶部的效果。在这里,我们将详细讲解使用JavaScript实现网页带动画返回顶部的方法。 实现步骤 实现网页带动画返回顶部的…

    JavaScript 2023年6月11日
    00
  • 前端组件化基础知识详细讲解

    前端组件化基础知识详细讲解 什么是前端组件化 前端组件化,是一种将页面拆分成多个可重用组件的开发方式。这种方式将页面抽象为一系列具有独立功能和样式的小组件,而这些组件可以在不同的页面中重复使用和组合,实现了代码的复用和模块化。 组件的基本要素 在前端组件化中,组件是构成页面的基本单位。组件有三个基本要素: HTML 结构:组件必须被封装在一个 HTML 元素…

    JavaScript 2023年6月11日
    00
  • 全面解析JavaScript Module模式

    全面解析JavaScript Module模式 什么是Module模式 Module模式是指使用JavaScript语言实现的,在一个程序或一个库中,将类似函数、变量等进行私有化,封装成一个独立的对象(即Module)来提供给外部调用。这种模式能够帮助开发者避免命名冲突和变量污染 ,提高代码的可维护性。 Module模式的基本实现 Module模式的基本核心…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部