文本区域在各个浏览器之间仍然没有完全同步。我注意到了两个主要问题:回车符和字符编码。
回车符
默认情况下被处理为 2 个字符\r\n(Windows 样式)。
问题在于 Chrome 和 Firefox 将其计为一个字符。你也可以选择它来观察,会发现一个不可见的字符被选中作为空格。
这里有一个解决方法:
var length = $.trim($(this).val()).split(" ").join("").split('\n').join('').length;
当用户输入换行时,Jquery单词计数
而另一方面,Internet Explorer会将其视为2个字符。
它们的表示形式是:
二进制:00001101 00001010
十六进制:0D0A
在UTF-8中表示为2个字符,并且在maxlength中计算为2个字符。
HTML实体可以通过以下方式创建:
1)从JavaScript代码创建:
<textarea id='txa'></textarea>
document.getElementById("txa").value = String.fromCharCode(13, 10);
2)从文本区域的内容解析:
Ansi代码:
<textarea>Line one. Line two.</textarea>
3) 从键盘插入回车键
4) 定义为文本框的多行内容
<textarea>Line one.
Line two.</textarea>
字符编码
输入字段(如文本区域)的字符编码与页面的字符编码是独立的。如果您计划计算字节数,则这一点非常重要。因此,如果您有一个元标头来定义页面的ANSI编码(每个字符1个字节),则文本框的内容仍然是UTF-8编码,每个字符占用2个字节。
这里提供了一个字符编码的解决方法:
function htmlEncode(value){
return $('<div/>').text(value).html();
}
function htmlDecode(value){
return $('<div/>').html(value).text();
}
从输入字段读取属性时丢失HTML编码