FRAME src 属性:我必须对值进行 URI 编码吗?

问题描述

是否有关于 srcFRAME 属性的任何要求/规范,特别是如果我必须自己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 中,发送的参数如下所示,这是不对的: enter image description here

Chrome 中正确的编码参数应该是这样的: enter image description here

我还发现,如果我们在 Internet 选项中选中 Send UTF-8 query strings,参数将被正确编码并且示例将在 IE 11 中工作:

enter image description here

所以问题是在 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。