【问题标题】:FRAME src attribute: Do I have to URI-encode the value?FRAME src 属性:我必须对值进行 URI 编码吗?
【发布时间】:2021-04-16 13:34:27
【问题描述】:

对于FRAMEsrc 属性是否有任何要求/规范,尤其是如果我必须自己URI 编码(百分比编码)其值(在HTML 中)?

看起来 Internet Explorer 在这里对某些字符(0x 编码而不是百分比编码)进行了错误编码(导致400 Bad Request 服务器响应),而 chrome/firefox 正确编码了这样的“框架 src”-URL 并且工作。

在 IE 11 上重现 400 响应但适用于其他浏览器的示例 HTML 代码(由于同源/跨站点限制,您可能需要绕过某些浏览器安全保护):

<!DOCTYPE html>
<html>
<FRAMESET>
<FRAME src="https://www.stackoverflow.com?param=ÖÄÜ"/>
</FRAMESET>
</html>

【问题讨论】:

  • HTML 被设计为具有弹性,浏览器应该尝试修复他们发现的所有错误。因此,您的编码并不需要正确。但是,依赖浏览器能够从错误条件中恢复会使事情变得难以预测。

标签: html internet-explorer frame urlencode frameset


【解决方案1】:

IE 11 中的 400 响应是由于 IE 未正确编码 url 参数。在 IE 11 中,发送的参数如下所示,这是不正确的:

Chrome中正确的编码参数应该是这样的:

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

所以问题是param=ÖÄÜ 在 IE 11 中没有编码为 UTF-8。我认为如果我们对 IE 的所有 url 进行编码会更好。此外,&lt;frameset&gt; is deprecated,您可以改用&lt;iframe&gt;。 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,我参考了上面的线程,我想出了解决方案:最好的方法是在 IE 中对所有 url 进行编码。

【讨论】:

  • 有趣,尤其是 IE 设置。为什么我在 IE 中得到 400,我非常清楚。但是,您的答案仍然缺乏是否可以或必须对 src 属性进行百分比编码(理想情况下,通过引用或多或少的官方规范)以正确修复该问题(或意识到 IE 是否存在错误)。
  • 嗨 @MRalwasser 我认为您需要在 IE 中对网址进行百分比编码。请查看我的编辑。
猜你喜欢
  • 2020-01-12
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多