java.net.URI-:索引XXX处片段中的非法字符-由于字符“0”#&引用;
源代码如下:(a-zA-Z全部替换为x) 我不明白为什么当“#”是一个有效的URL字符时,我会在索引215的片段中得到非法字符 URI的片段标识符组件允许间接java.net.URI-:索引XXX处片段中的非法字符-由于字符“0”#&引用;,java,url,Java,Url,源代码如下:(a-zA-Z全部替换为x) 我不明白为什么当“#”是一个有效的URL字符时,我会在索引215的片段中得到非法字符 URI的片段标识符组件允许间接 通过参考主资源标识辅助资源 资源和其他识别信息。[…]一个片段 标识符组件由数字符号表示 (“#”)字符,并以URI结尾。 格式是 fragment = *( pchar / "/" / "?" ) 其中pchar为 pchar = unreserved / pct-encoded / sub-delims / ":"
通过参考主资源标识辅助资源
资源和其他识别信息。[…]一个片段 标识符组件由数字符号表示 (“#”)字符,并以URI结尾。 格式是
fragment = *( pchar / "/" / "?" )
其中pchar
为
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
其中未保留
,pct编码
和子文件
是
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
换句话说,
不是指示片段开始的第一个
后面的有效字符。它需要被编码。使用%23
是否有一个API来“转义”所有无效字符?@user Spring的UriComponentsBuilder
类(在Spring web
库中)将为您执行此操作。@user4127我所知没有。URI.create(String)
方法声明IllegalArgumentException-如果给定字符串违反RFC2396
。因此,您传递的字符串必须是有效的URI3986@user4127似乎是说3986是最新的规范。不管怎样,如果您查看这两个规范,它们对于URI的片段
部分具有相同的可接受字符。我想Javadoc只是没有更新。
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="