2010-04-30 54 views
2

所以我工作的站点有通过传递一个键和值系统,通过查询字符串操作的过滤系统。URL编码,安全分隔符

整个网站很快就要经历一个重新考虑的因素,我在维护现有网站时,在讨论实现此目的的正确方法之前,我只需要改变我的分隔符的想法。

目前的格式是这样的:

cf=<key>:<value>

的问题是,我最近碰到一个问题,因为我们的一些此过滤器的新的价值观包含它们当中:。即:cf=MO_AspectRatio:16:10

是url编码,但浏览器去编码%3A到:上飞,因为:不打破固有的网址。

我需要的网址安全分隔符是一些建议没有:-_&?这是有道理的。我不在寻找像()或野生东西的解决方案。

回答

4

管道怎么样?

cf=MO_AspectRatio|16:10 
0

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

另一个选择是在输出之前urlencode两次,然后在输入时对它进行一次url解码(在php的所有输入上执行自动urldecode,或者apache不确定是谁执行此操作)。

2

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

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

2

URI scheme generic syntax承认两个有效的参数分隔符:&;。我总是看到前者,而不是后者。需要?符号才能正确识别查询字符串的开头,所以我不会推荐使用它。在网址上使用的/也是如此。

任何不属于此类的字符并不属于您的值,这是可以接受的。下面是一些可能的列表,通过我自己的喜好,不包括你明确拒绝的那些分类:

,+|#$!

任何人应该做的。另外,即使你特别要求不要:在未来的重构中,尝试使用真正的URI参数(使用&)。会为你节省很多头等。

+0

是的,这是该网站的重新构建计划,或者可能是重新构建当前的过滤机制。今天我更关心数据变化而不是破坏现有的功能。 谢谢:) – Aren 2010-04-30 23:26:12