网络浏览器中的 ANSI 与 UTF-8

ANSI vs UTF-8 in web Browser

我的要求是允许用户在我的网页的文本字段中输入时使用(键入)ANSI 字符而不是 utf-8。

我查看了html元标签

中字符集的设置
 <meta charset="ISO-8859-1"> 

这有助于以 ANSI 而不是 UTF-8 显示内容,但它不会阻止用户输入 utf-8。任何帮助表示赞赏。

如果你在and/or HTTP header中将页面的编码设置为UTF-8,它将被解释为UTF-8,除非用户故意去View->编码菜单并选择不同的编码,覆盖您指定的编码。

在这种情况下,accept-encoding 会在用户乱用页面编码时将提交编码设置回 UTF-8。但是,这在 IE 中仍然不起作用,因为之前在该浏览器中与 accept-encoding 讨论的问题。

因此,IMO 怀疑是否值得包含 accept-charset 来修复 non-IE 用户故意破坏页面编码的情况

让我们在这里区分两件事:用户可以键入的字符和用于将此数据发送到服务器的编码。这是两个不同的问题。

用户可以在浏览器的表单中输入任何内容。出于所有意图和目的,这些字符此时没有编码,它们是纯 "text";编码目前还没有发挥作用,您不能使用编码限制可用字符集。

一旦用户提交表单,浏览器将不得不以某种方式将此数据编码为二进制,这就是编码的来源。最终浏览器决定如何对数据进行编码,但它会选择中指定的编码表单的 HTTP headers、元元素 and/or accept-charset 属性。后者应该始终是决定因素,但您会在现实世界中发现错误行为(*咳咳*IE*咳咳*)。实际上,所有三个字符集定义都应该相同,以免造成任何混淆。

现在,如果您的用户输入了一些 "exotic" 个字符,并且浏览器已决定对 "ANSI" 中的数据进行编码,并且所选编码不能代表这些外来字符,那么浏览器通常会替换那些具有 HTML 个实体的字符。因此,即使在这种情况下,它也不会 限制 允许的字符,它只是找到了一种不同的编码方式。

How can I know what encoding is used by the user

你不能。您只能指定您 喜欢 接收的字符集,然后仔细检查您 确实 接收的字符集。如果期望不匹配,则拒绝输入(HTTP 400 Bad Request 响应可能是有序的)。

如果您想限制用户可以输入的可接受字符集,您需要通过检查和拒绝 个字符 来实现这一点,而与其编码无关。您可以在输入时在 Javascript 中执行此操作,最终需要在服务器上再次执行此操作(因为 browser-side Javascript 最终对可以提交给服务器的内容没有影响) .