详谈js对url进行编码和解码(三种方式的区别)

详谈js对URL进行编码和解码(三种方式的区别)

在JavaScript中,我们经常需要对URL进行编码和解码。比如在发送ajax请求时,如果URL中含有特殊字符,需要先对它进行编码后再发送请求;在处理查询字符串时,需要将编码后的字符串解码成可读的字符串。

JavaScript提供了三种方法来对URL进行编码和解码,包括encodeURI/decodeURIencodeURIComponent/decodeURIComponentescape/unescape。它们的使用场景和区别如下:

encodeURI/decodeURI

encodeURIdecodeURI分别用于对整个URL字符串进行编码和解码。它们对于URL中除了空格、字母、数字等字符以外的其他特殊字符不编码。

const url = 'http://example.com/path with spaces';
const encodedUrl = encodeURI(url);
console.log(encodedUrl); // 'http://example.com/path%20with%20spaces'

const decodedUrl = decodeURI(encodedUrl);
console.log(decodedUrl); // 'http://example.com/path with spaces'

在上面这个示例中,我们可以看到,encodeURI将URL中的空格编码成了%20,而decodeURI将其解码成了可读的空格。

encodeURIComponent/decodeURIComponent

encodeURIComponentdecodeURIComponent用于对URL中的参数部分进行编码和解码。它们对于URL中所有非字母、数字和- _ . ! ~ * ' ( )这些允许的字符也进行编码。

const url = 'http://example.com/path?foo=hello world';
const encodedUrl = url.replace('hello world', encodeURIComponent('hello world'));
console.log(encodedUrl); // 'http://example.com/path?foo=hello%20world'

const decodedUrl = decodeURIComponent(encodedUrl);
console.log(decodedUrl); // 'http://example.com/path?foo=hello world'

在上面这个示例中,我们使用encodeURIComponent将参数值hello world编码成了hello%20world,然后再将其拼接回URL中。最后使用decodeURIComponent将编码后的URL进行解码,得到原始的URL。

escape/unescape

escapeunescape用于将字符串进行编码和解码。它们类似于encodeURIComponentdecodeURIComponent,但是对于某些字符的编码方式可能不同。

const url = 'http://example.com/path?foo=hello world';
const encodedUrl = escape(url);
console.log(encodedUrl); // 'http%3A%2F%2Fexample.com%2Fpath%3Ffoo%3Dhello%20world'

const decodedUrl = unescape(encodedUrl);
console.log(decodedUrl); // 'http://example.com/path?foo=hello world'

在上面这个示例中,我们使用escape对URL进行编码,并使用unescape对其进行解码,最终得到原始的URL。

综上所述,三种URL编码解码的方法各有其适用的场景和特点。在实际开发中,需要根据不同的需求选择不同的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详谈js对url进行编码和解码(三种方式的区别) - Python技术站

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

相关文章

  • webpack自定义loader全面详解

    webpack自定义loader全面详解 什么是loader 在webpack的构建过程中,通过loader可以对文件进行转换处理。loader可以将文件从不同的语言(例如:TypeScript)转换为JavaScript,或将内联图像转换为data URL。webpack本身只能理解JavaScript和JSON文件,而loader能够让webpack处理…

    JavaScript 2023年6月10日
    00
  • 详细分析jsonp的原理和实现方式

    详细分析JSONP的原理和实现方式 JSONP概述 JSONP(JSON with Padding)是一种JSON数据格式的应用方式。由于同源策略的限制,XMLHttpRequest只允许请求与页面在同一域下的资源,而使用JSONP技术可以实现跨域访问。JSONP通过动态插入script标签,从而实现跨域请求。JSONP的工作原理是:在页面中创建一个 scr…

    JavaScript 2023年5月27日
    00
  • 实用的Javascript调试技巧整理

    实用的Javascript调试技巧整理 在开发过程中,Javascript调试技巧是非常重要的一部分。好的调试技巧能够极大提升开发的效率,排除隐藏的bug。本文将介绍一些实用的Javascript调试技巧,它们可以帮助你快速找到问题并解决它们。 1. 使用console调试 使用console输出变量、对象和函数的细节是最基本和最常用的调试技巧之一。cons…

    JavaScript 2023年5月27日
    00
  • javascript面向对象编程(一) 实例代码

    下面是针对 “javascript面向对象编程(一) 实例代码” 的详细攻略。 1. 阅读并理解代码 首先,我们需要仔细阅读提供的代码,深入理解它的结构、逻辑和运行机制。代码中定义了一个自定义对象 “Person”,其中包含变量和方法定义。在代码中,我们创建了一个 “Person” 实例,使用了对象的属性和方法。 function Person(name, …

    JavaScript 2023年5月18日
    00
  • Javascript Boolean prototype 属性

    以下是关于JavaScript Boolean.prototype属性的完整攻略。 JavaScript Boolean.prototype属性 JavaScript Boolean.prototype属性是Boolean对象的原型属性,它允许您向所有Boolean对象添加属性和方法。该属性是动态的,可以通过Boolean对象的实例访问。 下面是一个使用Bo…

    JavaScript 2023年5月11日
    00
  • 如何使用JavaScript快速创建一个1到100的数组

    下面是使用JavaScript快速创建1到100的数组的攻略: 1. 使用for循环快速创建一个1到100的数组 // 创建一个长度为 100 的数组 var arr = new Array(100); for (var i = 0; i < arr.length; i++) { // 把数组的每个元素赋值为它的下标+1 arr[i] = i + 1;…

    JavaScript 2023年5月27日
    00
  • JavaScript插件化开发教程 (二)

    下面是“JavaScript插件化开发教程 (二)”的完整攻略。 什么是插件 插件是一种可扩展的软件,可以嵌入到其他应用程序中,增加新的功能。在前端开发中,插件就是可以在网站或者应用程序中被嵌入的 JavaScript 库。 插件的优点 使用插件可以很大程度上提升代码重用和开发效率。当我们需要实现某个功能时,只需引入对应的插件即可,无需从头开始编写代码。而且…

    JavaScript 2023年5月18日
    00
  • JavaScript Date 对象

    以下是关于JavaScript Date对象的完整攻略。 JavaScript Date对象 JavaScript Date对象用于处理日期和时间。它可以存储从1970年1月1日00:00:00 UTC协调世界时)开始的毫秒数,并提供了一组方法来处理日期和时间。 下面是一个使用Date对象的示例: var now = new Date(); console.…

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