Parameters GET参数中允许的字符

Parameters GET参数中允许的字符,parameters,get,special-characters,character,Parameters,Get,Special Characters,Character,GET参数中允许哪些字符不进行编码或转义?我的意思是这样的: 你可以用什么来代替XYZ?我认为只有以下几个字符: a-z(a-z) 0-9 - _ 这是完整列表还是允许使用其他字符 我希望你能帮助我。提前谢谢 “|”!“|”~“|”*“|”“|”(“|”)也可以接受。实际上,如果GET参数编码正确,任何东西都可以包含在GET参数中。字母数字字符和所有这些字符 ~-*”(), 在URL中有效 所有其他字符都必须进行编码。有些保留字符具有保留的含义,它们是分隔符-:/?#[]@-和子分隔符-!

GET参数中允许哪些字符不进行编码或转义?我的意思是这样的:

你可以用什么来代替XYZ?我认为只有以下几个字符:

  • a-z(a-z)
  • 0-9
  • -
  • _
这是完整列表还是允许使用其他字符


我希望你能帮助我。提前谢谢

“|”!“|”~“|”*“|”“|”(“|”)也可以接受。实际上,如果GET参数编码正确,任何东西都可以包含在GET参数中。

字母数字字符和所有这些字符

~
-
*

在URL中有效

所有其他字符都必须进行编码。

有些保留字符具有保留的含义,它们是分隔符-
:/?#[]@
-和子分隔符-
!$&'()*+,;=

还有一组称为无保留字符的字符-字母数字和
-.\uz
-不需要编码

这意味着,当不属于非保留字符集的任何字符没有特殊意义时(例如,当作为
GET
参数的一部分传递时),都应该对其进行%编码

另请参见URL中允许使用哪些字符:

仅字母数字、特殊字符“$-551;+!*”()、”和 可以使用用于保留目的的保留字符 在URL中未编码


保留字符是“;”、“/”、“?”、“:”、“@”、“=”和“&”,这意味着如果您希望使用它们,您需要对它们进行URL编码。

我在bash中使用Chrome地址栏和
$QUERY\u字符串进行了测试,并观察到以下情况:

~!@$%^&*()-_=+[{]}\|;:',./?
grave(backtick)
以明文形式传递

分别转换为
%20
%22
%3C
%3E

#
被忽略,因为它由ye olde使用


“个人咬紧牙关太长了,读不下去了,”(P>>):在URCIS和RCF39中指定了URI(包含URN和URL)的编码规则,这里是TL;这些冗长而枯燥的文档的DR; 百分比编码,也称为URL编码,是一种在特定情况下对URI中的信息进行编码的机制。URI中允许的字符可以是保留的,也可以是非保留的。保留字符是指有时具有特殊含义的字符,但它们不是唯一需要编码的字符

有66个不需要任何编码的未保留字符:
abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvxyz012456789-。

有18个保留字符需要编码:
!*'();:@&=+$,/?#[]
,所有其他字符都必须编码

要对字符进行百分比编码,只需将“%”与其ASCII值串联在一起即可
十六进制。php函数“urlencode”和“rawurlencode”可以为您完成这项工作。

问题是,GET参数中允许哪些字符不进行编码或转义

根据(通用URL语法)和(HTTP/S URL语法),只需对查询集之外的字符进行百分比编码,请参见下面的定义

然而,还有一些额外的规范,如HTML5、W3C推荐。这些文档为一些字符添加了特殊的含义,特别是像=&+;这样的符号

这里的其他答案建议大多数保留字符应该编码,包括“/”?”。这是不正确的。事实上,建议不要对“/”?”字符进行百分比编码

对于可用性来说,有时最好避免百分比- 对这些字符进行编码

RFC3986将查询组件定义为:

query       = *( pchar / "/" / "?" )
pchar       = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~" 
百分比编码机制用于表示数据中的八位字节 当八位字节的对应字符位于 允许的集合或正在用作 组成部分

结论是XYZ部件应该编码:

special: # % = & ;
Space
sub-delims
out of query set: [ ]
non ASCII encodable characters
除非特殊符号是键=值分隔符


允许对其他字符进行编码,但这不是必须的。

但是这些字符有特殊的含义,所以如果你不想发送%or+,你必须对它们进行编码。是的,我不知道为什么我要写%Thank you!我只想知道哪些字符可以不用编码或转义就使用。我应该更好地指出这一点。那么我真的可以使用*!'()|没有对它们进行编码?非常感谢!所以我必须将.and~添加到我的列表中?我可以写index.php吗?page=start\u en-new~。而不转义它吗?如果说不能,但不应该,那就有点太大胆了。如果要规范化URI,就必须转义未保留的字符(并且只转义未保留的字符),但它很可能在无需转义的情况下实际工作。通常,您有转义函数,可以转义所有需要转义的内容。您通常使用此函数来转义传递的所有参数。天哪,我没有仔细查看您的示例。我以为这只是一组通用的特殊字符;-)不,您没有当然,我们必须避开这些,因为它们是无保留的。很抱歉混淆了。至于
urlencode()
我不知道它是否工作正常-PHP函数并不总是这样-但是如果它工作正常,那么可以用它进行测试;-)就像我说的那样-无保留地转义所有内容。RFC说实际上它不允许转义字符
/
。我查找这个,因为Swift不会转义东南方