Hol*_*osa 19 url uri http urlencode web
我注意到Java UriBuilder
没有编码:
查询参数值中包含的字符(ISO 8601格式的字符串).
根据维基百科,似乎冒号应编码.
特别是,对查询字符串进行编码使用以下规则:
- 字母(AZ和az),数字(0-9)和字符'.',' - ','〜'和'_'保持原样
- SPACE编码为'+'或%20 [需要引证]
- 所有其他字符编码为%FF十六进制表示,其中任何非ASCII字符首先编码为UTF-8(或其他指定编码)
那么,这笔交易是什么?查询参数中的冒号是否应该编码?
更新:
我查找了URI语法规范(RFC 3986),看起来像查询参数中的冒号实际上并不是必需的.以下是ABNF对URI的摘录:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=
Run Code Online (Sandbox Code Playgroud)
是的,它们应该在查询字符串中编码.正确的编码是%3A
但是,我可以理解为什么UriBuilder没有编码:
.您不希望在协议(例如http:
)之后或在ftp://username:password@domain.com
绝对URI中的用户名和密码(例如)之间对冒号进行编码.