我的资源是.
这意味着我的网址如下所示:
http://myapp/index/.
我需要添加查询参数,使其看起来像这样:
http://myapp/index/.?type=xml
我使用Freemarker来表示我的资源,并针对这种情况进行了编码百分比编码:
<#if key?matches("\\.")>
<li><a href="${contextPath}/index/%2E">${key}</a></li>
</#if>
这适用于Firefox。但所有其他浏览器,如IE,Safari,Chrom,Opera都忽略了我的网址编码点(http://myapp/index/%2E
)。
有什么建议吗?
答案 0 :(得分:20)
实际上,标准(RFC 3986)中没有明确说明.
或..
的百分比编码版本是否应该具有相同的此文件夹/ up-a - 文件夹意为未转义的版本。第3.3节仅讨论“路径段.
和..
”,但未说明它们是否在pct-encoding之前或之后与.
和..
匹配。
就我个人而言,我发现Firefox的解释%2E
并不意味着.
最实用,但不幸的是其他所有浏览器都不同意。这意味着您不能拥有仅包含.
或..
。
我认为唯一可能的建议是“不要那样做”!还有其他路径组件也很麻烦,通常是由于服务器的限制:路径中的%2F
,%00
和%5C
序列也可能被某些Web服务器和空路径段阻止也会造成问题。因此,通常不可能将所有可能的字节序列都放入路径组件中。
答案 1 :(得分:11)
这是不可能的。 §2.3说“。”是一个未保留的字符,“用相应的百分比编码的US-ASCII八位字节替换未保留字符的URI是等效的”。因此,/%2E%2E/
与/../
相同,并且会被标准化。
(这是bobince的答案和slowpoison的评论的组合。)