11

URL 查询字符串中允许使用哪些字符?

查询字符串是否必须遵循特定格式?

4

3 回答 3

11

根据https://www.rfc-editor.org/rfc/rfc3986

在第 2.2 节保留字符中,列出了以下字符:

保留= gen-delims / sub-delims

gen-delims = “:” / “/” / “?” /“#”/“[”/“]”/“@”</p>

子分隔符=“!” /“$”/“&” /“'”/“(”/“)”/“*”/“+”/“,”/“;” /“=”</p>

然后规范说:

如果 URI 组件的数据与保留字符作为分隔符的用途发生冲突,则必须在形成 URI 之前对冲突数据进行百分比编码。

接下来,在第 2.3 节未保留字符中,列出了以下内容:

未保留 = ALPHA / DIGIT / “-” / “.” /“_”/“~”</p>

于 2012-11-14T05:36:30.190 回答
11

维基百科有你的答案:http ://en.wikipedia.org/wiki/Query_string

" URL 编码:有些字符不能成为 URL 的一部分(例如空格),而另一些字符在 URL 中具有特殊含义:例如,字符 # 可用于进一步指定一个小节(或片段)文档;字符 = 用于将名称与值分开。可能需要转换查询字符串以满足这些约束。这可以使用称为 URL 编码的模式来完成。

特别是,对查询字符串进行编码使用以下规则:

  • 字母(AZ 和 az)、数字 (0-9) 和字符 '.'、'-'、'~' 和 '_' 保持原样
  • SPACE 编码为 '+' 或 %20[需要引用]
  • 所有其他字符都编码为 %FF 十六进制表示,任何非 ASCII 字符首先编码为 UTF-8(或其他指定的编码)

与波浪号(“~”)字符对应的八位字节通常被旧的 URI 处理实现编码为“%7E”;"%7E" 可以替换为 "~" 而不会改变其解释。将 SPACE 编码为 '+' 和选择“原样”字符将这种编码与 RFC 1738 区分开来。”

关于格式,查询字符串是名称值对。这 ?将查询字符串与 URL 分开。每个名称值对由与号 (&) 分隔,而名称(键)和值由等号 (=) 分隔。例如。http://domain.com?key=value&secondkey=secondvalue

在我提供的维基百科参考中的结构下:

  • 问号用作分隔符,不是查询字符串的一部分。
  • 查询字符串由一系列字段值对组成
  • 在每一对中,字段名称和值由等号“=”分隔。
  • 这一系列对由 & 号分隔,'&'(或分号,';' 用于嵌入在 HTML 中且不是由 ... 生成的 URL;见下文)。
  • W3C 建议所有 Web 服务器都支持分号分隔符以及与符号分隔符[6],以允许 HTML 文档中的 URL 中的 application/x-www-form-urlencoded 查询字符串,而不必对与符号进行实体转义。
于 2012-11-14T05:37:38.683 回答
1

此链接包含您都需要的答案和格式化值。

https://perishablepress.com/url-character-codes/

为方便起见,这是列表:

<     %3C
>     %3E
#     %23
%     %25
{     %7B
}     %7D
|     %7C
\     %5C
^     %5E
~     %7E
[     %5B
]     %5D
`     %60
;     %3B
/     %2F
?     %3F
:     %3A
@     %40
=     %3D
&     %26
$     %24
+     %2B
"     %22
space     %20
于 2015-07-21T10:03:53.087 回答