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

如何解决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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?