Создание 1-символьного поля ввода HTML, которое принимает эмодзи

Я пытаюсь сделать поле ввода из 1 символа, но обнаружил, что невозможно вставить эмодзи или использовать средство выбора эмодзи OSX, запущенное браузером.

<input maxlength='1' value='????'>

Смайлик показан, и его можно вставить в 3-байтовый Unicode, например ★, но не другой эмодзи. Он также отлично работает для maxlength 2.

Это ошибка браузера или она соответствует спецификации HTML? Я вижу то же самое в Chrome и Firefox.

Демо


person mahemoff    schedule 09.09.2015    source источник


Ответы (1)


Это поведение соответствует Спецификация HTML. В определении атрибута maxlength говорится:

Проверка ограничения: если элемент имеет максимально допустимую длину значения, его флаг грязного значения имеет значение true, его значение в последний раз было изменено пользователем (в отличие от изменения, внесенного сценарием), а длина кодовой единицы значения элемента больше, чем максимально допустимая длина значения элемента, то элемент слишком длинный.

(Мой акцент.) Как правило, веб-платформа обрабатывает строки как последовательности 16-битных кодовых единиц, а не как последовательности символов Unicode, поэтому такие символы, как эмодзи, которые находятся за пределами базовой многоязычной плоскости, рассматриваются как имеющие длину два. .

Очевидный обходной путь — установить maxlength=2 (или вообще отказаться от него) и выполнить проверку в JavaScript.

person Robin Houston    schedule 09.09.2015
comment
Спасибо за объяснение. Я до сих пор не понимаю, почему значение по умолчанию отображается в поле ввода из 1 символа, может быть, это ошибка браузера? - person mahemoff; 09.09.2015
comment
Значение по умолчанию может быть длиннее, чем maxlength. - person Robin Houston; 09.09.2015