IE在iframe表单目标中丢失自动UTF-8编码

时间:2010-07-07 06:34:32

标签: html internet-explorer encoding utf-8

我在IE中有一个奇怪的问题。它与IE如何根据其父内容检测iframe的编码有关。我的应用程序将页面内容包装在iframe中,并通过Content-Type标头将父窗口的编码设置为UTF-8。 iframe的内容不会通过Content-Type设置编码,而是在初始加载时选择父窗口的编码。这是理想的行为 - 内容窗口需要UTF-8编码用于某些语言内容,但由于我无法控制的复杂原因,它无法强制设置自己的编码,因此它依赖于父窗口的编码。

当内容页面是表单操作的目标时,会出现问题。当表单提交并在内容窗口中加载页面时,它会自动选择西欧(Windows)编码。有谁知道为什么?我曾尝试搜索有关相关行为的任何文档,但谷歌,他们什么都不做。任何类型的潜在客户(除了在内容中发送Content-Type标头或字节顺序标记)都将是最有帮助的。

我很遗憾没有公共场所来托管这个,但是将这些代码示例复制粘贴到本地文件并使用UTF-8编码保存每个而不用字节顺序标记应该始终如一地重现所有IE版本中的行为。

frame1.html

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<div>エンコード</div>
<iframe src="frame2.html"></iframe>

frame2.html

<form>
    <input value="エンコード">
    <input type="submit">
</form>

回顾一下这个例子,如果你加载页面并检查父和iframe的编码,你应该看到选中“自动选择”并选择“UTF-8”。如果您在iframe中点击提交,框架将重新加载,输入文本将出现乱码。检查iframe的编码仍应显示“自动选择”,但现在将选择“西欧(Windows)”而不是“UTF-8”。我需要知道在表单操作完成时是否还有其他任何操作可以使它自动保留UTF-8编码。

提前致谢!

1 个答案:

答案 0 :(得分:2)

如果您说无法添加Content-Type标头/ BOM,是否可以将Content-Type添加为元标记?类似的东西:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

最近我遇到了类似的问题 - IE在任何时候都会自动检测西欧,除非某个弹出窗口导航到该页面,然后导致IE选择UTF-8。我从来没有能够确切地追踪导致它的原因(结果页面是相同的,只有链接到它的页面是不同的!),所以我们最终通过强制UTF-8来修复它整个应用程序(带标题)。

如果您真的无法以任何方式修改内部页面,是否可以用自己的“替换”此页面,然后通过API或HTTP POST将内容发送到“其他”服务器你不需要担心IE的“自动检测”?