caw*_*caw 57 parameters get character special-characters
GET参数中允许哪些字符而不编码或转义它们?我的意思是这样的:
http://www.example.org/page.php?name=XYZ
你有什么可以而不是XYZ?我认为只有以下字符:
这是完整列表还是允许其他字符?
我希望你能帮助我.提前致谢!
Mic*_*ker 84
有保留的字符,有保留的含义,这些是分隔符:/?#[]@- 和subdelimiters -!$&'()*+,;=
还有一组称为无保留字符的字符 - 字母数字和-._~- 不需要编码.
这意味着,任何不属于未保留字符集的内容都应该是%编码的,当它们没有特殊含义时(例如,当作为GET参数的一部分传递时).
dmi*_*tri 13
该问题询问GET参数中允许哪些字符而不编码或转义它们.
根据RFC3986(通用URL语法)和RFC7230,第2.7.1节(HTTP/S URL语法),百分比编码所需的唯一字符是查询集外部的字符,请参阅下面的定义.
但是,还有其他规范,如HTML5,Web表单和过时的索引搜索,W3C推荐.这些文件特别为某些字符添加了特殊含义,如=&+; .
这里的其他答案表明大多数保留字符应该被编码,包括"/""?".那不对.实际上,RFC3986第3.4节建议不要使用百分比编码"/""?" 字符.
对于可用性来说,有时候更好地避免对这些字符进行百分比编码.
RFC3986将查询组件定义为:
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
Run Code Online (Sandbox Code Playgroud)
百分比编码机制用于表示当该八位位组的相应字符在允许的集合之外或者被用作该组件的分隔符或在该组件内时的组件中的数据八位字节.
结论是XYZ部分应编码:
special: # % = & ;
Space
sub-delims
out of query set: [ ]
non ASCII encodable characters
Run Code Online (Sandbox Code Playgroud)
除非特殊符号 =&; 是 key =值分隔符.
允许编码其他字符但不是必需的.
所有关于 URI(包含 URN 和 URL)编码的规则都在 RFC1738 和 RFC3986 中指定,这里是这些冗长乏味的文档的 TL;DR:
百分比编码,也称为 URL 编码,是一种在特定情况下对 URI 中的信息进行编码的机制。URI 中允许的字符是保留的或非保留的。保留字符是那些有时具有特殊含义的字符,但它们并不是唯一需要编码的字符。
有 66 个不需要任何编码的非保留字符:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~
有 18 个保留字符需要编码:!*'();:@&=+$,/?#[],所有其他字符都必须编码。
要对字符进行百分比编码,只需将“%”及其十六进制的 ASCII 值连接起来。php 函数“urlencode”和“rawurlencode”为您完成这项工作。