Web浏览器中的ANSI与UTF-8

时间:2015-06-15 04:55:43

标签: javascript html utf-8 character-encoding ansi

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

我查看了html元标记

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

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

2 个答案:

答案 0 :(得分:3)

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

用户可以在浏览器中将所需内容输入到表单中。对于所有意图和目的,这些字符此时没有编码,它们是纯粹的“文本”;编码还没有发挥作用,你不能用编码限制可用字符集。

一旦用户提交表单,浏览器就必须以某种方式将这些数据编码为二进制文件,这是编码的来源。最终,浏览器决定如何编码数据,但它会选择HTTP中指定的编码表单的标题,元元素和/或accept-charset属性。后者应该始终由决定因素决定,但你会在现实世界中发现有缺陷的行为(*咳嗽*咳嗽* IE *咳嗽*)。在实践中,所有三个字符集定义应该相同,不会引起任何混淆。

现在,如果您的用户键入了一些“异国情调”字符,并且浏览器决定使用“ANSI”对数据进行编码,并且所选择的编码不能代表那些奇特的字符,那么浏览器通常会用HTML实体替换这些字符。因此,即使在这种情况下,它也不会限制允许的字符,它只是找到了一种不同的编码方式。

  

我如何知道用户使用的编码

你做不到。您只能指定要喜欢接收哪个字符集,然后仔细检查这实际上是您 接收的内容。如果期望值不匹配,请拒绝输入(HTTP 400 Bad Request响应可能是有序的。)

如果要限制用户可以输入的可接受字符集,则需要通过检查并拒绝字符而不依赖于其编码来执行此操作。您可以在输入时在Javascript中执行此操作,并最终需要在服务器上再次执行此操作(因为浏览器端Javascript最终不会影响可以提交到服务器的内容)。

答案 1 :(得分:1)

如果您在一个和/或HTTP标头中将页面的编码设置为UTF-8,它将被解释为UTF-8,除非用户故意转到View-&gt;编码菜单并选择不同的编码,覆盖你指定的那个。

在这种情况下,在用户弄乱页面编码时,接受编码会产生将提交编码设置回UTF-8的效果。但是,由于之前在浏览器中使用accept-encoding讨论过的问题,这仍然无法在IE中运行。

所以它的IMO怀疑是否值得包括accept-charset以修复非IE用户故意破坏页面编码的情况