网址中%符号的含义是什么?

时间:2013-08-18 18:05:24

标签: url

当我复制粘贴这篇维基百科文章时,它看起来像这样。

http://en.wikipedia.org/wiki/Gruy%C3%A8re_%28cheese%29

但是,如果将其粘贴回URL地址,则百分号会消失,而且似乎是Unicode字符(可能还有特殊的URL字符)代替了百分号。

是Unicode和特殊网址字符的缩写吗?

我习惯在JavaScript中看到\ u00ff等。

4 个答案:

答案 0 :(得分:6)

您要查找的引用是RFC 3987: Internationalized Resource Identifiers,具体为the section on mapping IRIs to URIs

RFC 3986: Uniform Resource Identifiers指定保留字符必须为percent-encoded,但指定将百分比编码字符解码为US-ASCII,其中不包含字符,例如è

RFC 3987指定非ASCII字符应首先编码为UTF-8,以便根据RFC 3986对其进行百分比编码。如果您允许我在Python中进行说明:

>>> u'è'.encode('utf-8')
'\xc3\xa8'

这里我要求Python使用UTF-8将Unicode è编码为一串字节。返回的字节是0xc30xa8。百分比编码,看起来像%C3%A8

您网址中出现的括号也符合US-ASCII,因此它们使用US-ASCII代码点进行百分比转义,这些代码点也是有效的UTF-8。

所以,不,没有简单的16×16表 - 这样的表永远不能代表Unicode的丰富性。但有一种明显疯狂的方法。

答案 1 :(得分:3)

URI 中的

%后跟0-9A-F中的两个字符,是使用该十六进制代码编写字符的转义版本。这样做意味着您可以使用可能在其他语言中具有特殊含义的字符编写 URI

对于空格,常见示例为%20%5B%5C分别为[]

答案 2 :(得分:2)

对于您习惯使用的JavaScript,它只是一种不同的语法约定。换句话说,URL语法与JavaScript的语法完全不同,%是在该语法中引入双十六位数字符代码的方式。

某些字符必须进行转义才能成为网址/ URI的一部分。例如,/字符具有含义;换句话说,它是一个元字符。如果你需要一个/在路径组件的中间(这肯定会有点奇怪),你必须逃脱它。这类似于在JavaScript字符串常量中转义引号字符的需要。

答案 3 :(得分:0)

请注意%符号服务器有两个主要用途。一种是对特殊字符进行编码,另一种是对您可以使用硬件/键盘输入的Unicode字符进行编码。例如%C3%A8来编码è,而任何编码都代表正斜杠/

使用JavaScript我们可以创建一个编码图表:

http://jsfiddle.net/CG8gx/3/

  

[“\ x00”,“\ x01”,“\ x02”,“\ x03”,“\ x04”,“\ x05”,   “\ x06”,“\ x07”,“\ b”,“\ t”,“\ n”,“\ v”,“\ f”,“\ r”,“\ x0E”,“\ x0F”,   “\ x10”,“\ x11”,“\ x12”,“\ x13”,“\ x14”,“\ x15”,“\ x16”,“\ x17”,   “\ x18”,“\ x19”,“\ x1A”,“\ x1B”,“\ x1C”,“\ x1D”,“\ x1E”,“\ x1F”,“”,   “!”,“\”“,”#“,”$“,”%“,”&“,”'“,”(“,”)“,”*“,”+“,”,“, “ - ”,“。”,   “/”,“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“:”,“; “,”<“,   “=”,“>”,“?”,“@”,“A”,“B”,“C”,“D”,“E”,“F”,“G”,“H”,“我“,”J“,   “K”,“L”,“M”,“N”,“O”,“P”,“Q”,“R”,“S”,“T”,“U”,“V”,“W” “, “X”,   “Y”,“Z”,“[”,“\”,“]”,“^”,“_”,“`”,“a”,“b”,“c”,“d”,“e “, “F”,   “g”,“h”,“i”,“j”,“k”,“l”,“m”,“n”,“o”,“p”,“q”,“r”,“s” “,”t“,   “你”,“v”,“w”,“x”,“y”,“z”,“{”,“|”,“}”,“〜”,“\ x7F”]