如何解决FRAME src 属性:我必须对值进行 URI 编码吗?
是否有关于 src
的 FRAME
属性的任何要求/规范,特别是如果我必须自己URI 编码(百分比编码)其值(在HTML)?
看起来 Internet Explorer 对此处的某些字符进行了错误的编码(0x 编码而不是百分比编码)(导致 400 Bad Request
服务器响应),而 chrome/firefox 对这样的“frame src”-URL 进行编码正常工作。
在 IE 11 上重现 400 响应但适用于其他浏览器的示例 HTML 代码(由于同源/跨站点限制,您可能需要绕过某些浏览器安全保护):
<!DOCTYPE html>
<html>
<FRAMESET>
<FRAME src="https://www.stackoverflow.com?param=ÖÄÜ"/>
</FRAMESET>
</html>
解决方法
IE 11 中的 400 响应是由于 IE 没有正确编码 url 参数。在 IE 11 中,发送的参数如下所示,这是不对的:
我还发现,如果我们在 Internet 选项中选中 Send UTF-8 query strings
,参数将被正确编码并且示例将在 IE 11 中工作:
所以问题是在 IE 11 中 param=ÖÄÜ
没有被编码为 UTF-8。我认为如果我们为 IE 编码所有的 url 会更好。此外,<frameset>
is deprecated,您可以使用 <iframe>
代替。 IE 11 中的工作示例代码如下所示:
<!DOCTYPE html>
<html>
<body>
<iframe src="https://www.stackoverflow.com?param=ÖÄÜ"></iframe>
<script>
var mysrc = "https://www.stackoverflow.com?param=ÖÄÜ";
document.getElementsByTagName("iframe")[0].src = encodeURI(mysrc);
</script>
</body>
</html>
编辑:
我也试图找到一些关于此的官方文档,但似乎什么也没有。但我发现了一些相关的主题:
encoding of query string parameters in IE10
Internet Explorer having problems with special chars in querystrings
如果您参考线程,您会发现 EricLaw 还说:
该行为并未在任何地方完整记录。
我们无法可靠地使用未在 Internet Explorer 中正确编码的 URL。
由于我们无法控制用户是否检查了 IE 中的 Send UTF-8 query strings
并且我参考了上面的线程,所以我想出了解决方案:最好的方法是将所有 url 编码在IE。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。