如何确保表单中编码的文本为utf8

Eth*_*man 14 html javascript encoding utf-8

我有一个用户可以输入文本的html框.我想确保在框中输入的所有文本都以UTF-8编码或在用户完成输入时转换为UTF-8.此外,我不太清楚在输入文本框时如何选择各种UTF编码.

一般来说,我对以下内容感到好奇:

  • 当用户在文本框中键入内容时,浏览器如何确定要使用哪些编码?
  • javascript如何确定html文本框中字符串值的编码?
  • 我可以强制浏览器只使用UTF-8编码吗?
  • 如何将任意编码编码为UTF-8我假设有一个JavaScript库?

**编辑**

删除了一些不符合我目标的问题.

本教程帮助我更好地理解JavaScript字符代码,但是在所有情况下都没有错误,并且实际上并没有将字符代码转换为utf-8. http://www.webtoolkit.info/javascript-base64.html

Bri*_*ell 16

  • 当用户在文本框中键入内容时,浏览器如何确定要使用哪些编码?

它使用默认情况下解码页面的编码.根据规范,您应该能够使用元素的accept-charset属性覆盖它<form>,但IE是错误的,所以你不应该依赖于此(我已经看到几个不同的来源描述了几个不同的错误,我不知道我面前有IE的所有相关版本进行测试,所以我会把它留在那里).

  • javascript如何确定html文本框中字符串值的编码?

JavaScript中的所有字符串都以UTF-16编码.浏览器会将所有内容映射到JavaScript的UTF-16,从UTF-16映射到编码的页面.

UTF-16是一种源自UCS-2的编码.最初,人们认为65,536个代码点对于所有Unicode都足够了,因此16位字符编码就足够了.事实证明情况并非如此,因此字符集扩展到1,114,112个代码点.为了保持向后兼容性,为代理对留出了一些未使用的16位字符集范围,其中两个16位代码单元用于编码单个字符.有关详细信息,请阅读维基百科上的UTF-16和UCS-2.

结果是当你str在JavaScript中有一个字符串时,str.length没有给你字符数,它给你代码单元的数量,其中两个代码单元可用于编码单个字符,如果该字符不在基本的多语言平面.例如,"abc".length给你3,但"".length给你6; 并且"".substring(0,1)看起来像一个空字符串,因为代理对的一半不能显示,但字符串仍包含该无效字符(我不保证这可以跨浏览器工作;我相信可以删除破碎的字符).要获得有效的角色,您必须使用"".substring(0,2).

  • 我可以强制浏览器只使用UTF-8编码吗?

最好的方法是以UTF-8格式提供页面.确保您的Web服务器正在发送相应的Content-type: text/html; charset=UTF-8标头.您可能还希望在<meta charset="UTF-8">元素中嵌入一​​个元素<head>,以用于Content-Type未正确设置的情况(例如,如果您的页面是从本地磁盘加载的).

  • 如何将任意编码编码为UTF-8我假设有一个JavaScript库?

JavaScript中没有太多需要对特定编码的文本进行编码.如果您只是写入DOM,或者读取或填写表单控件,则应该使用被视为UTF-16代码单元序列的JavaScript字符串.XMLHTTPRequest,当用于send(data)通过POST时,将使用UTF-8(如果你传递一个文件,声明中<?xml ...>声明了不同的编码,它可能会或可能不会将其转换为UTF-8,所以为了兼容性,你通常不应该使用任何东西除了UTF-8之外).