我正在尝试创建一个链接,在Github上打开New issue
页面,用现有的问题知识填充它。
为了做到这一点,我使用的查询参数如下:
https://github.com/User/Repository/issues/new?title=Some text&body=More Text
工作正常,但我尝试使用Markdown格式化文档,并在通过调用
创建新的URL
后转义所有符号
URL url = new URL("https://github.com/User/Repository/issues/new?title=Some text&body=# Header # Another header");
结果将是:
https://github.com/User/Repository/issues/new?title=Some text&body=# Header %23 Another header
第二个#
正在被转义,但第一个不是,我不太明白为什么。
有什么想法吗?
答案 0 :(得分:3)
简而言之,网址解析器会将您的第一个#
视为一个片段(a.k.a。anchor,例如<a name="named-anchor">
)。因为根据RFC-3986: Section 3,片段必须是最后的并且#
是保留字符,在第一个#
之后的任何内容被假定为该片段的一部分,导致解析器进一步编码&#34;无效&#34;字符,例如您的第二个#
。来自RFC:
通用URI语法由一个分层的组件序列组成,称为方案,权限,路径,查询和片段。
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
请注意,fragment
位于最后,并由#
分隔。
处理此问题的最佳方法是:
body
query parameter您自己或RestTemplate
或Apache HttpComponents。