java – RFC3986 – 哪些pchars需要百分比编码?
我需要生成一个href到一个URI.当涉及到需要百分比编码的保留字符时链接到/ some / path;元素应该显示为< a href =“/ some / path; element”> (我知道该路径;元素代表单个实体).
最初我正在寻找一个这样做的Java库,但我最终自己写了一些东西(看下面的Java是什么失败,因为这个问题不是Java特定的). 所以RFC 3986 does suggest when NOT to encode.这个应该是在我读的时候发生的,当字符处于未保留(ALPHA / DIGIT /“ – ”/“”/“_”/“?”)类的时候.到现在为止还挺好.但是相反的情况呢? RFC仅提到百分比(%)总是需要编码.但其他人呢? 问题:假设一切不是未保留的,可以/应该是百分比编码是正确的吗?例如,打开括号(不一定需要编码但分号;如果我不编码,我最后在之后找到/第一个* ;一个href =“/ first(second”>我总是最终寻找/第一个(第二个,如预期的那样),令我困惑的是,两者(和;在RFC相同的sub-delims类中)我想象,编码所有非未保留的是一个安全的赌注,但SEOability,用户友好性在涉及本地化的URI? 现在,Java库失败了.我试过这样做 > javax.ws.rs.core.UriBuilder [*] / first是当点击< a href =“/ first; second”>时,在服务器端调用HttpServletRequest.getServletPath()的结果. 编辑:我可能需要提到这个行为是在Tomcat下观察到的,我已经检查过Tomcat 6和7的行为方式相同. 解决方法
RFC 3986说:
这意味着您决定根据上下文需要编码哪个分隔符(即< delimiter>)字符.不需要编码的那些不应该被编码. 例如,如果出现在路径组件中,则不应该对/ a进行百分号编码,但是当它出现在查询或片段中时,您应该对它进行百分比编码. 所以,其实一个;字符(它是< reserved>的成员)不应该被自动百分比编码,实际上,java URL和URI类不会这样做;请参阅URI(…) javadoc,具体是第7步),了解< path>组件被处理. 这一点得到加强:
所以这说明一个包含百分比编码的URL;与包含raw的URL不同.最后一句话意味着它们不应该被自动编码或解码百分之百. 这让我们有这个问题 – 你为什么要被编码百分比
对不起,但不符合分号应该被转义. 就URL / URI规范而言,没有什么特别的意义.它可能对特定的Web服务器/网站有特殊的含义,但一般来说(即没有网站的具体知识),您无法知道这一点. >如果在一个特定的URI中有特殊的含义,那么如果你的百分之百逃脱它,那么你会破坏这个含义.例如,如果网站使用;以允许将会话令牌附加到路径,然后百分比编码将阻止它识别会话令牌… 这意味着知道“正确的事情”需要深入了解URI对最终用户和/或站点的意义.这将需要高级思维阅读技术来实施.我的建议是通过在将URI路径传递给您的软件之前适当地转义URI路径的任何分隔符来获取CMS来解决它.该算法必然是针对CMS和内容传送平台的.它/他们将响应由URL识别的文档的请求,并且需要知道如何解释它们. (支持任意使用任意路径的人有点疯狂,必须有一些限制,例如Windows甚至不允许在文件名组件中使用文件分隔符,所以你必须在某处有一些边界.只是一个决定他们应该在哪里的问题.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |