【问题标题】:What do % signs mean in a url?网址中的 % 符号是什么意思?
【发布时间】:2013-08-18 18:05:24
【问题描述】:

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

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

但是,如果您将其粘贴回 URL 地址,百分号就会消失,并且看起来是 Unicode 字符(可能还有特殊的 URL 字符)会取代百分号。

这些是 Unicode 和特殊 URL 字符的缩写吗?

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

【问题讨论】:

  • 刚刚在 Chrome、IE 和 Firefox 中测试。只有 FF 在地址栏中显示解码的 URL ()
  • @stack_temp:这不是 16x16 图表。字符使用 UTF-8 编码,然后字节的十六进制表示是转义码。例如,字符å 被编码为两个字节并表示为%C3%A5
  • @stack_temp:UTF-8 代码最长可达 6 个字节,代表超过 110,000 个不同的字符。 (它可以代表超过一百万个代码点,但其中大部分尚未使用。)
  • @stack_temp:UTF8 将 Unicode 代码点转换为 8 位字节,然后 URI 编码将 8 位字节转换为纯 ASCII 文本。 (具有讽刺意味的是,它通常被存储为 UTF8 或 UTF16)

标签: url


【解决方案1】:

您要查找的参考是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

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

所以,不,没有简单的 16×16 表——这样的表永远不能代表 Unicode 的丰富性。但是有一种方法可以解决表面上的疯狂。

【讨论】:

  • 根据定义,有一个 16x16 表,正如您所说的,编码创建了一个 %HEXHEX 表单。十六进制是 16 个符号,其中有两个。我不确定你为什么认为我认为这将涵盖所有 unicode。这只是阅读单个 %XX 编码的一个很好的起点。
  • @employee-0 你问è是怎么变成%C3%A8的,反之亦然,需要用上面的过程来编码。而且这个过程不适合 16×16 的表格。
  • 我没有问如何表示Unicode的丰富性,但也许我不小心问了,你是说URL中的所有%XX编码都是Unicode字符吗?
  • @employee-0 你的陈述让我很困惑。您是否想知道如何表示像 è 这样不属于 US-ASCII 的字符?
  • 这不是一个声明,而是一个问题。 URL Unicode 编码中的所有 %XX 编码吗?
【解决方案2】:
URI 中的

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

常见的例子是%20 用于空格,%5B%5C 分别用于[]

【讨论】:

    【解决方案3】:

    这只是与 JavaScript 不同的语法约定。换句话说,URL 语法与 JavaScript 的语法完全不同,% 是在该语法中引入两位十六进制字符代码的方式。

    某些字符必须转义才能成为 URL/URI 的一部分。例如,/ 字符是有意义的;换句话说,它是一个元字符。如果您需要在路径组件中间使用/(诚然这有点奇怪),您必须将其转义。这类似于需要在 JavaScript 字符串常量中转义引号字符。

    【讨论】:

    • @stack_temp 因为它们不允许出现在 URL 中,除非它们被转义。
    • @stack_temp 它只是 UTF-8;换句话说,Unicode。因此%41 是“A”的代码。在 JavaScript 中,encodeURIComponent() 函数将修复 URI 路径组件,使其符合规则。
    • @stack_temp 你所说的“转义”是什么意思?
    • @stack_temp 不,你不能。就像我说的,URL/URI 语法与 JavaScript 语法不同。换句话说,% 约定是对 URL/URI 字符串进行转义的方法。
    • 重要的是要注意 % 符号服务器的两个主要用途。一种是对特殊字符进行编码,另一种是对硬件/键盘无法输入的 Unicode 字符进行编码。
    【解决方案4】:

    重要的是要注意 % 符号服务器的两个主要用途。一种是对特殊字符进行编码,另一种是对硬件/键盘无法输入的 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”、“I” ", "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", “u”、“v”、“w”、“x”、“y”、“z”、“{”、“|”、“}”、“~”、“\x7F”]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2011-04-18
      • 1970-01-01
      • 2011-04-07
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多