对于我们的Web应用程序,我们有多个包含文本区域的HTML页面。我们所有的页面都使用ISO-8859-1字符集呈现。当在Windows机器上通过IE6访问页面并且将特殊字符(如“智能引用”)复制到文本区域时,我们的一些页面使用Windows 1252字符编码提交页面。在其他页面上,页面显示为使用UTF-8字符编码提交。我一直在使用以下隐藏字段跟踪提交字符编码:
<input type="hidden" name="_charset_" />
在Windows 1252提交字符编码页面上,我们收到一个值“windows-1252”。
在UTF-8提交字符编码页面上,我们收到一个空值。
在后端,我们使用ISO-8859-1。虽然理想情况下我们希望提交字符编码,但我没有看到在IE6上强制执行该行为的选项。如果要在Windows 1252和UTF-8之间进行选择,我更希望在Windows 1252中提交内容,以便在ISO-8859-1中重新呈现页面时更有可能正确呈现。
我已经深入研究了我们的页面,没有什么东西能让我想到为什么有些页面用一个字符编码提交。
1)当IE 6返回一个空白的 charset 时,这实际上等同于UTF-8吗?当提交字符编码为UTF-8时,IE6是否总是返回空白字符集,或者仅当它无法正确确定要使用的字符编码时?
2)页面上可能存在哪些差异,导致IE 6在某些页面上选择Windows 1252,而在其他页面上选择UTF-8?我扫描了页面中的UTF-8字符和任何accept-charset属性,但都找不到。
附加说明:我在下面的链接中找到了关于 charset 隐藏输入的信息。
http://web.archive.org/web/20060427015200/ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html
2条答案
按热度按时间e3bfsja21#
MSDN声明IE只接受“utf-8”作为此属性的值。
cig3rfwq2#
名为
_charset_
的隐藏字段由符合HTML5的客户端进行特殊处理:[...]名称 charset 的ASCII不区分大小写匹配是特殊的:如果用作没有value属性的Hidden控件的名称,则在提交过程中,value属性将自动获得一个由提交字符编码组成的值。
根据以下算法选择提交字符编码:
如果用户代理要为表单选择编码,则必须运行以下步骤:
1.设encoding为文档的字符编码。
1.如果form元素有accept-charset属性,将encoding设置为运行这些子步骤的返回值:
1.让input为表单元素的accept-charset属性的值。
1.假设候选编码标签是在ASCII空白上分割输入的结果。
1.假设候选编码是字符编码的空列表。
1.对于候选编码标签中的每个令牌,依次(按照它们在输入中被发现的顺序),获得令牌的编码,并且如果这不会导致失败,则将编码附加到候选编码。
1.如果候选编码为空,则返回UTF-8。
1.返回候选编码中的第一个编码。
1.返回从编码中获取输出编码的结果。
所以我认为,如果你在后端没有收到
_charset_
表单参数,你应该假设字符编码是UTF-8