使用分号进行元刷新

时间:2011-02-26 00:26:02

标签: html meta-tags

我在我的网址中使用分号作为查询字符串分隔符而不是和(&) 我的问题是,当我尝试使用分号在查询字符串中对元数据进行元刷新时,它会将其转换为%253b。因此,当转发时,我无法读取查询字符串参数,因为分隔符不再存在。例如:

http://domain.com/?foo=1;bar=2  

成为:

http://domain.com?foo=1%253bbar=2  

如何解决这个问题,因此在进行元刷新时它不会转换分号?

感谢任何帮助!

3 个答案:

答案 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

W3C-建议