Html 带分号的元刷新
我在URL中使用分号作为查询字符串分隔符,而不是and(&)。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进行元刷新时,它会将其转换为%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
- 分号作为分隔符:
- 保留字符:
:/?#[ ] @ ! $ & ' ( ) * + , ; =代码>
- 使用元刷新:
- “;”而不是“&”:
是一个保留字符,如在reserved中使用的&
和其他字符。我错了。。。但是谁推荐使用
也让我感兴趣,你有@danorton的任何来源吗?回顾我的笔记,这些建议在RFC和W3讨论中实际上是非正式的。其原因是,符号的问题要大得多,而且通常在嵌入HTML的URL中编码不正确。(浏览器套件中有黑客,可以解释这种极为常见的编码错误。)