Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.net.URI-:索引XXX处片段中的非法字符-由于字符“0”#&引用;_Java_Url - Fatal编程技术网

java.net.URI-:索引XXX处片段中的非法字符-由于字符“0”#&引用;

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 / ":"

源代码如下:(a-zA-Z全部替换为x)

我不明白为什么当“#”是一个有效的URL字符时,我会在索引215的片段中得到非法字符

URI的片段标识符组件允许间接
通过参考主资源标识辅助资源
资源和其他识别信息。[…]一个片段 标识符组件由数字符号表示 (“#”)字符,并以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  = "!" / "$" / "&" / "'" / "(" / ")"
             / "*" / "+" / "," / ";" / "="