JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

URI是统一资源标识符,URI包含了绝对URI和相对URI两种方式。其中,绝对URI包含协议、主机名、文件名和查询参数,而相对URI只需要相对于当前文件所属的路径进行命名即可。

URI编码就是为了解决URI含有特殊字符而无法被正确显示、传递和处理的问题。在JavaScript中,我们可以使用三个函数来实现URI编码解码,分别是:escape()encodeURI()decodeURI()

escape()

escape()函数可以将字符串中的非ASCII码字符和一些特殊字符(如空格、+、-、/、;等)转换成十六进制编码,以便于在URI中正常传输和显示。

示例代码:

var str = "Hello, 世界!";
var encoded = escape(str);
console.log(encoded); // "Hello%2C%20%E4%B8%96%E7%95%8C%21"

在上面的代码中,使用escape()函数将字符串中的中文和空格编码成了URI格式。其中,逗号和叹号等非特殊字符并没有被编码。

encodeURI()

encodeURI()函数则是更智能的URI编码函数,它只对URI不合法的字符进行编码,不会对协议名、主机名、路径和查询参数中的特殊字符进行编码。

示例代码:

var uri = "http://www.example.com/路径/文件名.html?参数=值#哈希值";
var encoded = encodeURI(uri);
console.log(encoded); // "http://www.example.com/%E8%B7%AF%E5%BE%84/%E6%96%87%E4%BB%B6%E5%90%8D.html?%E5%8F%82%E6%95%B0=%E5%80%BC#%E5%93%88%E5%B8%8C%E5%80%BC"

在上面的代码中,使用encodeURI()函数对一个URI进行了智能编码。可以注意到,只有路径中的中文和特殊字符被编码,其他的部分并没有被编码。

decodeURI()

decodeURI()函数则用于将URI中的编码字符串进行解码还原成原始字符串。

示例代码:

var encoded = "http://www.example.com/%E8%B7%AF%E5%BE%84/%E6%96%87%E4%BB%B6%E5%90%8D.html?%E5%8F%82%E6%95%B0=%E5%80%BC#%E5%93%88%E5%B8%8C%E5%80%BC";
var decoded = decodeURI(encoded);
console.log(decoded); // "http://www.example.com/路径/文件名.html?参数=值#哈希值"

在上面的代码中,使用decodeURI()函数将编码后的URI字符串还原成了原始字符串。

总结来看,escape()函数可以将所有字符编码,但是对于URI而言,它并不智能,会把很多有效的字符都编码,导致URI过长而不便传输和阅读。而encodeURI()函数则是智能编码,只对URI不合法的字符进行编码,更加适合处理URI编码的问题。最后,使用decodeURI()函数可以对编码后的URI字符串进行还原,还原成原始字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码 - Python技术站

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

相关文章

  • JavaScript定时器常见用法实例分析

    下面就为大家详细讲解“JavaScript定时器常见用法实例分析”的完整攻略。 定时器的基本用法 定时器是JavaScript中的一个重要概念,它允许我们在一段时间之后执行代码。以下是定时器的基本用法示例: // 1秒后弹出提示框 setTimeout(function() { alert("Hello World!"); }, 1000…

    JavaScript 2023年6月10日
    00
  • nuxt中使用路由守卫的方法步骤

    下面是详细讲解”nuxt中使用路由守卫的方法步骤”的完整攻略。 什么是路由守卫? 路由守卫是用来监听路由跳转的钩子函数,我们可以在路由跳转过程中对路由做出一些拦截或者其他操作,比如登录校验、数据埋点等。 Nuxt中使用路由守卫的方法步骤 1. 在 nuxt.config.js 中配置路由 要使用路由守卫,必须先在 nuxt.config.js 中配置好路由,…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript中循环控制语句的用法

    详解JavaScript中循环控制语句的用法 在JavaScript中,循环控制语句是非常常用的语句之一。它可以帮助我们更加方便快捷地进行重复处理的操作。下面,我们就来详细讲解一下JavaScript中的循环控制语句。 JavaScript中几种常见的循环控制语句 JavaScript中常见的循环控制语句有三种:for、while、do while。 for…

    JavaScript 2023年5月27日
    00
  • 关于Javascript中值得学习的特性总结

    Javascript中值得学习的特性总结 Javascript是一门非常强大的脚本语言,广泛应用于前端开发、后端开发、移动开发、游戏开发等领域。在学习Javascript时,掌握它的各种特性对于深入理解和熟练使用Javascript非常重要。下面是Javascript中值得学习的一些特性的总结: 1. 原型和原型链 Javascript采用的是面向对象的编程…

    JavaScript 2023年5月18日
    00
  • js 在定义的时候立即执行的函数表达式(function)写法

    “js 在定义的时候立即执行的函数表达式(function)写法”也称为IIFE(Immediately Invoked Function Expression)。 IIFE 是一种 JavaScript 函数,它们在定义时会立即执行自己,且不会在全局可见,即不会污染全局作用域。IIFE 最常用的场景是将代码封装在一个作用域中,以防止变量名冲突和代码污染。下…

    JavaScript 2023年5月27日
    00
  • JS分层架构低代码跨iframe拖拽示例详解

    本文主要介绍了一种基于JavaScript分层架构,低代码实现跨iframe拖拽(drag and drop)的示例。以下是完整攻略: 概述 JS分层架构是一种标准化组织JavaScript代码的方式,将代码按照功能分为不同的层,如数据层、业务逻辑层和UI层。采用此方式可以提高代码的可维护性和可扩展性。 低代码是一种可以供非专业人员使用的开发方式,它减少了编…

    JavaScript 2023年6月11日
    00
  • js实现的类marquee水平循环滚动

    JS实现的类marquee水平循环滚动,是指在一个容器内部以水平方向不间断滚动一段文字或图片等内容,类似于HTML中的标签效果。以下为完整的攻略: 步骤1:HTML结构 首先,在HTML中建立一个容器,例如: <div id="scroll-container"> <span>这是一段滚动文字</span&g…

    JavaScript 2023年6月11日
    00
  • 前端token中4个存储位置的优缺点说明

    前端Token是指存储在前端网页中的用来标识用户身份的令牌,一般用于用户登录、验证和权限控制等方面。前端Token可以存在多个存储位置中,通常有四种:Cookie、Web Storage、IndexedDB、Memory。 以下是关于这四个存储位置的优缺点说明: Cookie Cookie是HTTP协议中常用的一种存储方式,可以存放在客户端的浏览器中,也可以…

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