使用 UTF8 增补字符输入的最大长度 HTML

Maxlength of HTML input with UTF8 supplementary characters

我想让我的用户能够在输入字段中输入表情符号字符。我认为在 2019 年,这应该像将网站的元字符集设置为 UTF-8 一样简单。然而,当在 Chrome 或 Firefox 中测试时,下面的示例以不同的方式计算补充 UTF-8 字符(长度为 4 个字节)。
在第一个输入中,我只能在 poop 之后再输入 2 个字符。在第二个输入中,我仍然可以在 之后再输入 3 个字符,即 3 个字节长。

是什么导致了这种不一致的行为? 4 字节字符是否还有另一个 HTML 元设置?它在 Edge 17 中运行良好。即使是垃圾 IE 11 也能正确计算长度。

<input type="text" value="" maxlength="4" />
<input type="text" value="‰" maxlength="4" />

我的测试用例: http://jsfiddle.net/L726ryea/7/

HTML5 spec says that maxlength applies to the JavaScript string length也就是UTF-16编码单元的个数。因此像表情符号这样超过 0xFFFF 的代码点算作两个代码单元。这解释了您所看到的行为。