UrlEncoding-Safe Delimiter

时间:2010-04-30 22:24:44

标签: url urlencode

所以我正在研究的网站有一个过滤系统,它通过一个密钥和值系统通过一个查询字符串来运行。

整个网站很快就会重新考虑因素而且我维护现有的网站,所以在我们讨论实现这个问题的正确方法之前,我只需要改变分隔符的想法。

目前的格式是这样的:

cf=<key>:<value>

问题是,我最近遇到了一个问题,因为此过滤器的一些新值包含:。我:cf=MO_AspectRatio:16:10

是UrlEncoded,但浏览器会将%3a解码为:动态,因为:本身并不会破坏网址。

我需要一些不合理的:-_&?的网址安全分隔符的建议。我不是在寻找像()这样的解决方案,也不是一种疯狂的解决方案。

4 个答案:

答案 0 :(得分:3)

管道怎么样?

cf=MO_AspectRatio|16:10

答案 1 :(得分:3)

This Wikipedia article有助于了解有关未预留和保留字符的更多信息。

到目前为止tilde ~可能是最好的选择。但是仍有机会迟早会破裂。或者您应该在用户输入上正确记录和验证。

答案 2 :(得分:2)

URI scheme generic syntax允许使用两个有效的参数分隔符:&;。我总是看到前者,而不是后者。需要?符号才能正确识别查询字符串的开头,因此我不建议使用它。同样适用于网址上使用的/

任何不属于其中一个且不属于您的值的角色都是可以接受的。这是一个可能的列表,按照我自己的偏好排序,不包括你明确拒绝的那些:

, + | # $ !

他们中的任何一个都应该这样做。

此外,即使您特别要求不要:在将来的重构中,尝试使用真正的URI参数(使用&amp;)。会为你节省很多头条。

答案 3 :(得分:0)

最直接的解决方案是对整个字符串进行base64编码,然后在输入时对其进行base64解码。

另一种选择是在输出之前对它进行两次urlencode,然后在输入时对其进行urldecode一次(在php的所有输入上都会有自动的urldecode,或者apache不确定是谁做的)。