我在我的网址中使用分号作为查询字符串分隔符而不是和(&) 我的问题是,当我尝试使用分号在查询字符串中对元数据进行元刷新时,它会将其转换为%253b。因此,当转发时,我无法读取查询字符串参数,因为分隔符不再存在。例如:
http://domain.com/?foo=1;bar=2
成为:
http://domain.com?foo=1%253bbar=2
如何解决这个问题,因此在进行元刷新时它不会转换分号?
感谢任何帮助!
答案 0 :(得分:2)
正如评论中所指出的,;
是网址的有效字符,其保留用于RFC中未指定的用途。就像danorton在自己的回答中指出的那样,问题似乎是URL的双重编码。
实际上,如果没有关于环境的更多信息以及出现问题时的确切情况,就无法提供解决方案。
但是,正如我之前的错误答案所述,我仍然坚持使用&
作为分隔符的立场。在我看来,使用其他东西是在寻找问题。
我不认为;是一个url的有效字符,所以我编码它似乎很正常。有一个原因&使用,为什么要改变它?
做这样的事情就是要问题。让所有浏览器和操作系统组合起来已经很难了,为什么让事情变得更难?
如果您想坚持使用PHP并且使用PHP,请查看urlencode()和parse-url()
答案 1 :(得分:2)
问题是查询字符串正在被编码两次,当它根本不需要编码时。这可能是因为编码和解码查询字符串的代码(您没有提及)期望传统的&符号(&)查询字符串分隔符,并且可以自由编码其他所有内容。
原文:foo=1;bar=2
第1次编码(分号→%3B):foo=1%3bbar=2
第二次编码(百分比→%25):foo=1%253bbar=2
答案 2 :(得分:1)
使用网址的单引号可以解决问题。
<meta http-equiv="refresh" content="0;URL='http://domain.com/?foo=1;bar=2'">
大多数浏览器(Firefox,Chrome,Safari,Opera)可能会在没有引号的情况下重定向到完整的url atm,但是Internet Explorer(IE10也会)在没有单引号的第二个分号后丢弃该部分。
Uri语法RFC3986
保留字符:http://tools.ietf.org/html/rfc3986#appendix-A
: / ? # [ ] @ ! $ & ' ( ) * + , ; =
W3C-建议