从此不再惧怕URI编码 JavaScript及C# URI编码详解

yizhihongxing

从此不再惧怕URI编码:JavaScript及C# URI编码详解

URI是什么?

URI(Uniform Resource Identifier),中文名为统一资源标识符,是用于标识抽象或物理资源的字符串。

在Web中,我们常用URI表示Web资源的位置和ID。

URI分为三个部分:

URI = scheme://host[:port]/path[?query][#fragment]

  • scheme表示访问资源所使用的协议,如http、https、ftp等;
  • host表示资源所在的主机名或IP地址;
  • port表示网络资源的端口号;
  • path表示网络资源的访问路径;
  • query表示对网络资源的请求参数;
  • fragment表示资源内部指向的锚点。

URI编码是什么?

URI编码是一种用来对URI中的非ASCII字符和特殊字符进行编码的过程,以便能够在URI中可靠地传输和解析。

URI编码使用百分号(%)后面跟两个字符的方式来表示一个字符。其中,两个字符表示该字符在ASCII字符集合中的16进制表示,例如%20表示空格符。

URI编码在JavaScript的实现

在JavaScript中,可以使用内置的 encodeURI()函数和encodeURIComponent()函数对URI编码进行处理。

encodeURI()

encodeURI()函数会对整个URI进行编码处理,不会对URL中的特殊字符进行编码。其中,特殊字符包括:

  • 保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ]
  • 非保留字符:字母、数字、- _ . ! ~ * ' ( )

示例代码:

let uri = "https://www.example.com/search?q=钓鱼岛";
let encodedUri = encodeURI(uri);
console.log(encodedUri); // 输出 https://www.example.com/search?q=%E9%92%93%E9%B1%BC%E5%B2%9B

encodeURIComponent()

encodeURIComponent()函数会对整个URI进行编码处理,同时也会对URL中的特殊字符进行编码。其中,特殊字符同上。

示例代码:

let uri = "https://www.example.com/search?q=钓鱼岛";
let encodedUri = encodeURIComponent(uri);
console.log(encodedUri); // 输出 https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3D%25E9%2592%2593%25E9%25B1%25BC%25E5%25B2%259B

URI编码在C#的实现

在C#中,可以使用System.Web.HttpUtility类中的UrlEncode()方法和UrlDecode()方法对URI编码进行处理。

UrlEncode()

UrlEncode()方法会对整个URI进行编码处理,同时也会对URL中的特殊字符进行编码。其中,特殊字符同上。

示例代码:

string uri = "https://www.example.com/search?q=钓鱼岛";
string encodedUri = System.Web.HttpUtility.UrlEncode(uri);
Console.WriteLine(encodedUri); // 输出 https%3a%2f%2fwww.example.com%2fsearch%3fq%3d%e9%92%93%e9%b1%bc%e5%b2%9b

UrlDecode()

UrlDecode()方法会对整个URI进行解码处理。

示例代码:

string uri = "https%3a%2f%2fwww.example.com%2fsearch%3fq%3d%e9%92%93%e9%b1%bc%e5%b2%9b";
string decodedUri = System.Web.HttpUtility.UrlDecode(uri);
Console.WriteLine(decodedUri); // 输出 https://www.example.com/search?q=钓鱼岛

结论

URI编码是一种对URI进行处理的重要方法,能够在URI中可靠地传输和解析非ASCII字符和特殊字符。

在JavaScript中,可以使用内置的encodeURI()函数和encodeURIComponent()函数对URI编码进行处理。

在C#中,可以使用System.Web.HttpUtility类中的UrlEncode()方法和UrlDecode()方法对URI编码进行处理。

需要注意的是,URI编码对于相同的字符,JavaScript和C#实现的编码方式可能会不同,因此在使用时需要注意URI编码的一致性。

示例

示例1

原始URI:https://baike.baidu.com/item/朝阳群众艺术馆

JavaScript编码:https://baike.baidu.com/item/%E6%9C%9D%E9%98%B3%E7%BE%A4%E4%BC%97%E8%89%BA%E6%9C%AF%E9%A6%86

C#编码:https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%e6%9c%9d%e9%98%b3%e7%be%a4%e4%bc%97%e8%89%ba%e6%9c%af%e9%a6%86

示例2

原始URI:https://www.baidu.com/s?wd=%E9%92%93%E9%B1%BC%E5%B2%9B&pn=20

JavaScript编码:https://www.baidu.com/s?wd=%E9%92%93%E9%B1%BC%E5%B2%9B&pn=20

C#编码:https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%25E9%2592%2593%25E9%25B1%25BC%25E5%25B2%259B%26pn%3D20

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从此不再惧怕URI编码 JavaScript及C# URI编码详解 - Python技术站

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

相关文章

  • 纯js实现html转pdf的简单实例(推荐)

    要实现将HTML转换成PDF文件,可以使用第三方库jsPDF,该库内置了HTML的转PDF的功能。下面是一个纯JS实现HTML转PDF的简单实例的完整攻略: 步骤一:准备工作 首先,需要引入 jsPDF 库: <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.3.1/jsp…

    JavaScript 2023年5月27日
    00
  • (推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib

    S.Sams Lifexperience ScriptClassLib(以下简称 SLSC)是一个非常好的 JavaScript 函数库,它包含了许多常用的函数和类,可以帮助开发者快速创建高效且易于维护的JavaScript应用程序。 安装 你可以在官方网站 https://www.sams.com/slscl 上下载 SLSC 的最新版本,也可以使用 np…

    JavaScript 2023年6月10日
    00
  • JavaScript插件化开发教程(五)

    JavaScript插件化开发教程(五)是关于模板的进一步讲解,主要包括以下部分: 一、模板引擎 1.1 什么是模板引擎 模板引擎是一种将数据和模板结合起来生成HTML文档的工具。在JavaScript插件开发中,模板引擎是一个非常重要的部分,在将数据渲染到HTML中时起到了至关重要的作用。 常见的模板引擎有:Handlebars、Mustache、ejs、…

    JavaScript 2023年5月18日
    00
  • BootStrap Validator使用注意事项(必看篇)

    BootStrap Validator使用注意事项(必看篇) 作为一个前端开发者,你可能会经常使用Bootstrap框架来开发网站。其中,Bootstrap Validator是Bootstrap框架中一个非常有用的jQuery插件,可以用于表单验证。在使用Bootstrap Validator时,需要注意以下事项: 1. 引用依赖文件 在使用Bootstr…

    JavaScript 2023年6月10日
    00
  • JavaScript监听一个DOM元素大小变化

    要监听一个DOM元素大小的变化,我们可以利用JavaScript提供的IntersectionObserver API来实现。IntersectionObserver设计的初衷是为了监听页面中一个元素是否进入了视窗,但它也可以用于监听元素的大小变化。 以下是监听DOM元素大小变化的详细攻略: 步骤一:创建一个IntersectionObserver实例 首先…

    JavaScript 2023年6月10日
    00
  • javascript创建对象、对象继承的实用方式详解

    JavaScript创建对象、对象继承的实用方式详解 在JavaScript中,对象是一个重要的概念,能够帮助我们创建具有特定属性和方法的数据结构。为了更好地管理和组织代码,对象继承是一种常用的技术。本文将深入介绍JavaScript中如何创建对象以及不同的对象继承方式。 创建对象 构造函数 在JavaScript中,我们可以使用构造函数来创建一个对象。构造…

    JavaScript 2023年5月27日
    00
  • Ajax同步与异步传输的示例代码

    下面我将详细讲解一下“Ajax同步与异步传输的示例代码”的完整攻略。 什么是Ajax? Ajax是指异步JavaScript和XML(Asynchronous JavaScript and XML)的缩写,其主要用于在Web应用程序中实现异步数据交换,从而实现与服务器对数据进行交互而无需刷新整个页面的效果。Ajax避免了传统页面刷新方式在交互效率和用户体验方…

    JavaScript 2023年6月11日
    00
  • JS+Canvas绘制抽奖转盘

    下面是详细讲解“JS+Canvas绘制抽奖转盘”的完整攻略: 一、准备工作 创建 HTML 文件并引入 Canvas(例如:) 获取 Canvas 对象,创建绘图上下文和 Canvas 尺寸 定义需要用到的变量(例如:奖项,概率,角度,旋转速度等) 二、绘制转盘基本结构和奖项 绘制转盘外圆和内圆 绘制奖项扇形,并填充不同的颜色 三、转盘动画 绑定旋转事件(例…

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