编码URL的算法

本文关键字:算法 URL 编码 | 更新日期: 2023-09-27 18:21:25

C#中是否有一些算法可以用可以在web浏览器中正确显示的符号对url进行编码?

类似于Base64

编码URL的算法

标准(RFC 3986,又名STD 66)为您制定了它。特别是§2和2.1:

2.字符

URI语法提供了一种编码数据的方法,可能用于为了识别资源,如字符序列。URI反过来,字符经常被编码为八位字节进行传输或演示。本规范未规定任何特殊要求URI字符和八位字节之间映射的字符编码用于存储或传输这些字符。当URI出现在协议元素,字符编码由该协议定义;如果没有这样的定义,则假定URI在字符编码为周围的文本。

ABNF表示法将其终端值定义为非负基于US-ASCII编码字符集的整数(代码点)[ASCII]。因为URI是一个字符序列,所以我们必须反转以便理解URI语法。因此ABNF使用的整数值必须映射回其通过US-ASCII输入相应的字符,以完成语法规则。

URI由一组有限的字符组成,这些字符由数字、字母和一些图形符号。的保留子集这些字符可用于界定URI,而其余字符,包括未保留的集合以及那些不充当分隔符的保留字符,分别定义组件的标识数据。

2.1.百分比编码

百分比编码机制用于表示当该八位位组的相应字符在允许的集或正在用作组成部分百分比编码的八位字节被编码为字符三元组,由百分比字符"%"后跟两个表示该八位字节数值的十六进制数字。对于例如,"%20"是二进制八位字节的编码百分比"00100000"(ABNF:%x20),在US-ASCII中对应于空格字符(SP)。第2.4节描述了百分比编码和应用解码。

pct编码="%"HEXDIG HEXDIG

大写的十六进制数字"A"到"F"等效于小写数字"a"到"f"。如果有两个URI仅在百分比编码中使用十六进制数字的情况下有所不同八位字节,它们是等价的。为了保持一致性,URI生产者和规范化器应使用大写的十六进制数字表示所有百分比-编码。

一般来说,在URL中可以自由表示的字符只有,而不需要对进行百分比编码

  • 未保留的字符。这些是US-ASCII(7位)字符
    • A-Z
    • a-z
    • 0-9
    • -._~
  • 保留字符 在URL及其方案的语法中作为角色使用时。这些保留字符是:
    • :/?#[]@!$&'()*+,;=

根据标准,任何其他字符都必须进行正确的百分比编码。

进一步注意,URL可能只包含从US-ASCII字符集(0x00-0x7F)中提取的字符:如果您的URL包含该代码点范围之外的字符,则需要对这些字符进行适当编码,以便在US-ASCII中表示(例如,通过HTML/XML实体引用)。此外,您的申请负责对此进行解释。