Url编码安全分隔符

3

我正在处理的网站有一个筛选系统,通过在查询字符串中传递键和值来操作。

整个网站很快就要进行重构,我正在维护现有的网站,因此在讨论正确的实现方法之前,我只需要更改定界符的想法。

当前格式如下:

cf=<key>:<value>

问题是,最近我遇到了一个问题,因为这个筛选器的一些新值中包含:。例如:cf=MO_AspectRatio:16:10

value已被UrlEncoded,但浏览器会将%3a解码为:,因为:不会破坏URL。

我需要一些建议,以便使用安全的URL分隔符,而不是:-_&?等。我不希望出现像()或其他奇怪的解决方案。

4个回答

4
管道怎么样?
cf=MO_AspectRatio|16:10

3

这篇维基百科文章对了解非保留字符和保留字符很有用。

就波浪线~而言,这可能是最好的选择。但仍然存在它迟早会出现问题的可能性。或者您应该在用户输入时进行适当的文档记录和验证。


3
URI scheme generic syntax允许使用两个有效的参数分隔符:&;。我一直看到的是前者,从未见过后者。符号?用于正确识别查询字符串的开头,因此不建议使用它。同样适用于在URL上使用的/
任何不是这些字符并且不是您值的一部分的字符都是可接受的。以下是可能的列表,按我的偏好排序,不包括您明确拒绝的字符: , + | # $ ! 它们中的任何一个都可以。
此外,即使您明确要求不要:在将来的重构中,请尝试使用真正的URI参数(使用&)。会节省您很多麻烦。

是的,在网站的重新构建计划中,或者也许是针对当前过滤机制的重新构建。今天我更关心数据变化不会破坏现有功能。 - Aren

1

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

另一个选项是在输出之前进行两次 urlencode,然后在输入时进行一次 urldecode(PHP 或者可能是 Apache 会自动对所有输入进行 urldecode)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接