GET参数中允许的字符
GET参数中允许哪些字符不加编码或转义? 我的意思是这样的:
http://www.example.org/page.php?name=XYZ
你可以有什么,而不是XYZ? 我认为只有以下字符:
- az(AZ)
- 0-9
- –
- _
这是完整的列表还是有额外的字符?
我希望你能帮助我。 提前致谢!
有保留的字符 ,有保留的意思,那些是分隔符 – :/?#[]@
– 和subdelimiters – !$&'()*+,;=
,; !$&'()*+,;=
还有一组字符称为非保留字符 – 字母数字和-._~
– – 这些字符不被编码。
这意味着任何不属于非保留字符集的东西都应该是%编码的,当它们没有特殊的含义时(例如,当作为GET
参数的一部分传递时) 。
另请参阅RFC3986:统一资源标识符(URI):通用语法
从RFC 1738中可以在URL中允许字符:
只有字母数字,特殊字符“$ -_。+!*()”以及用于其保留目的的保留字符可以在URL内未经编码使用。
保留字符是“;”,“/”,“?”,“:”,“@”,“=”和“&”,这意味着如果您想使用它们,则需要对其进行URL编码。
我使用Chrome地址栏和bash中的$QUERY_STRING
进行了testing,并观察到以下情况:
~!@$%^&*()-_=+[{]}\|;:',./?
和grave (backtick)
作为明文传递。
,
"
, <
和>
分别转换为%20
, %22
, %3C
和%3E
。
#
被忽略,因为它是由老主播使用的 。
就个人而言,我会说咬项链,并用base64编码:)
字母数字字符和全部
~
-
_
.
!
*
'
(
)
,
在URL中有效。
所有其他字符必须编码。
"." | "!" | "~" | "*" | "'" | "(" | ")"
"." | "!" | "~" | "*" | "'" | "(" | ")"
也是可以接受的[RFC2396] 。 真的,如果编码正确,任何东西都可以在GET参数中。
关于URI编码(包含URN和URL)的所有规则在RFC1738和RFC3986中都有详细说明,这里是TL,这些冗长枯燥的文档的DR:
百分比编码(也称为URL编码)是在某些情况下对URI中的信息进行编码的机制。 URI中允许的字符既可以是保留的,也可以是不保留的。 保留字符是那些有时具有特殊含义的字符,但它们不是唯一需要编码的字符。
有66个非保留字符不需要任何编码: abcdefghiklmopqrstuvwABCDEFGHIKLMOPQRSTUVWXYZ0123456789-_.~
有18个需要编码的保留字符: !*'();:@&=+$,/?#[]
,所有其他字符必须被编码。
要对字符进行百分比编码,只需以hex连接“%”及其ASCII值即可。 PHP函数“urlencode”和“rawurlencode”为你做这个工作。