Html 带分号的元刷新

Html 带分号的元刷新,html,meta-tags,Html,Meta Tags,我在URL中使用分号作为查询字符串分隔符,而不是and(&)。 我的问题是,当我尝试对查询字符串中带有分号的url进行元刷新时,它会将其转换为%253b。因此,转发时,我无法读取查询字符串参数,因为分隔符不再存在。例如: http://domain.com/?foo=1;bar=2 变成: http://domain.com?foo=1%253bbar=2 我如何解决这个问题,使它在执行元刷新时不会转换分号 谢谢你的帮助 更新 正如评论中所指出的,是url的有效字符,该url是为中未

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

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

http://domain.com?foo=1%253bbar=2  
我如何解决这个问题,使它在执行元刷新时不会转换分号

谢谢你的帮助

更新 正如评论中所指出的,
是url的有效字符,该url是为中未指定的目的而保留的。正如danorton在其自己的答案中指出的那样,问题似乎是URL的双重编码

事实上,如果没有关于环境和问题发生时的确切情况的更多信息,就不可能提供解决方案

然而,正如我在之前的错误回答中所述,关于使用
&
作为分隔符,我仍然坚持我的立场。在我看来,使用其他东西是在问问题

我的“错误”答案 我不认为;是url的有效字符,因此对它进行编码似乎很正常。有一个原因&被使用,你为什么要改变它

做这样的事是自找麻烦。要在所有浏览器和操作系统的组合上工作已经很难了,为什么要让事情变得更难呢


如果您想坚持使用PHP,请看一看,问题是查询字符串被编码了两次,而根本不需要编码。这可能是因为编码和解码查询字符串(您没有提到)的代码期望使用传统的符号(&)查询字符串分隔符,并且可以自由地编码其他所有内容

原件:
foo=1;条形图=2

第一次编码(分号)→ %3B):
foo=1%3bbar=2


第二次编码(百分比)→ %25):
foo=1%253bbar=2

对url使用单引号将解决此问题

<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建议

  • 使用元刷新:
  • “;”而不是“&”:

您是否需要使用服务器端语言,例如,可以处理这个问题。看看urldecode,谢谢戴维。请考虑使用RururLeNoCudie()和RWURLDECODE(),它正确地遵循相关的标准。正确的是,半冒号是保留字符。你不能用它。杰森,你很幸运,浏览器正在为你修复它,而不是仅仅用核弹。错误,分号在URL查询字符串中没有保留,事实上,它是建议使用的分隔符,而不是符号,因为分号在HTML中也不是保留字符。@danorton由谁推荐?阅读后,
是一个保留字符,如在reserved中使用的
&
和其他字符。我错了。。。但是谁推荐使用
也让我感兴趣,你有@danorton的任何来源吗?回顾我的笔记,这些建议在RFC和W3讨论中实际上是非正式的。其原因是,符号的问题要大得多,而且通常在嵌入HTML的URL中编码不正确。(浏览器套件中有黑客,可以解释这种极为常见的编码错误。)