代码之家  ›  专栏  ›  技术社区  ›  Dharman vijay

带utf8补充字符的HTML输入的最大长度

  •  0
  • Dharman vijay  · 技术社区  · 7 年前

    我想让我的用户可以选择在输入字段中输入emoji字符。我认为在2019年,这应该和将网站的元字符集设置为UTF-8一样简单。但是,在chrome或firefox中测试时,下面的示例以不同的方式计算补充的utf-8字符(长度为4字节)。
    在第一个输入中,我只能在poop后面再输入2个字符。在第二个输入中,我仍然可以在后面再输入3个字符 ‰ 它有3个字节长。

    是什么导致了这种不一致的行为?是否有其他4字节字符的HTML元设置?它在第17边缘运行良好。即使是垃圾箱11也能正确计算长度。

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   nwellnhof    7 年前

    这个 HTML5 spec maxlength 适用于 JavaScript string length 它是UTF-16代码单位的数目。所以超过0xffff的代码点,比如emojis,可以算作两个代码单元。这就解释了你所看到的行为。

    推荐文章