所以我正在研究的网站有一个过滤系统,它通过一个密钥和值系统通过一个查询字符串来运行。
整个网站很快就会重新考虑因素而且我维护现有的网站,所以在我们讨论实现这个问题的正确方法之前,我只需要改变分隔符的想法。
目前的格式是这样的:
cf=<key>:<value>
问题是,我最近遇到了一个问题,因为此过滤器的一些新值包含:
。我:cf=MO_AspectRatio:16:10
值 是是UrlEncoded,但浏览器会将%3a解码为:动态,因为:本身并不会破坏网址。
我需要一些不合理的:
,-
,_
,&
,?
的网址安全分隔符的建议。我不是在寻找像()
这样的解决方案,也不是一种疯狂的解决方案。
答案 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不确定是谁做的)。