Internet Explorer:URL中的HTML实体

4

我有以下PHP代码:

echo "<input type='image' src='myImage.png' onClick='javascript:location.href = \"index.php?p=1&copy=true\"' />";

如果我点击图片,Chrome会重定向到index.php?p=1&copy=true。但是如果我在Internet Explorer 11中点击图片,它会重定向到index.php?p=1©=true
Internet Explorer似乎会替换URL中的HTML实体字符。
我尝试使用&amp;代替&,但是我遇到了同样的问题:IE将其替换为版权符号。
如何在我的URL中使用&copy? 我知道一个可能的解决方案是用&whatever替换&copy,但那么我必须更改整个系统。
还有其他人遇到了同样的问题: https://gist.github.com/pguillory/5136408

我尝试使用 "&" 代替 "&",但是我遇到了同样的问题:IE会将其替换为版权符号。你能展示一个例子吗?因为那是正确的做法。记住:属性值文本是HTML文本,所以命名实体被解析。 - T.J. Crowder
请注意,在onxyz属性中不要使用javascript:,只有在需要URL的地方才可以使用。所以你不想在上面使用它(尽管它是无害的;JavaScript引擎只会认为它是一个带标签的语句)。 - T.J. Crowder
@T.J.Crowder:你的 onclick='location.href = "index.php?p=1&amp;copy=true"' 不起作用。IE 11 会将 &amp;copy 替换为 © - mhellmeier
呃,复制了它:http://jsbin.com/dajihiwiwo/ - T.J. Crowder
2个回答

4
正确的版本应该使用&amp;。不幸的是,IE11确实存在一个严重的错误,会导致它将&amp;copy转换为版权符号。
我找到了一个解决方法:对copy中的c进行百分号编码。
echo "<input type='image' src='myImage.png' onClick='location.href = \"index.php?p=1&amp;%63opy=true\"' />";
// --------------------------------------------------------------------------------------^^^

这是一个在IE11上失败的正确版本示例: http://jsbin.com/dajihiwiwo/

以下是更为晦涩但同样正确且可以在IE11上工作的示例: http://jsbin.com/nehuxazeka/


谢谢你的回答。我尝试了你的代码,但是IE 11将我重定向到index.php?p=1&%63opy=true。你的jsbin链接在IE 11中可以工作。也许duckduckgo做了一些不同的事情? - mhellmeier
@Pengxer:是的。我刚试了一下一个完全不使用查询字符串的域名,IE11还是保留了%63。这不应该发生。真是太棒了。 - T.J. Crowder
@Pengxer:话虽如此:“index.php?p=1&%63opy=true”在规范上与“index.php?p=1&copy=true”相同。PHP没有在“$_GET”中给出“copy”值吗? - T.J. Crowder
是的,你说得对。我只看了一下URL,并将其与你的duckduckgo示例进行了比较,找到了差异。但是你的代码可以运行,而且$_GET['copy'](在PHP中)已经被设置了。谢谢! - mhellmeier
我认为这是被接受的答案,因为它是我的问题的真正解决方案(解决方法)。如果你需要一个简单的解决方案,请看看_LooInSpain_的答案。它只适用于除HTML实体之外的其他变量。 - mhellmeier

3

为什么不直接交换变量呢?

可以将 index.php?p=1&copy=true 替换为 index.php?copy=true&amp;p=1 ,它仍然能够正常工作。


这是一个不错的、实用的解决方案,在这种情况下可以使用。 - T.J. Crowder
谢谢你的回答。它对我有用。但是如果您在URL中仅使用HTML实体,则仍会存在问题。但这(实际上)不是我的问题:D - mhellmeier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接