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”为你做这个工作。