Количество символов длина emoji?

Я хочу проверить имя, когда новый пользователь регистрируется на моей странице. Одна из этих проверок - если лимит символов не превышает 100.

но так как один смайлик, как

2 ответов


Unicode определяет абстрактные символы как кодовые точки, но то, что позволяет отображать его на экране, - это шрифт. Шрифт-это набор графических фигур, называемых глифами, и они являются визуальным представлением кодовой точки или последовательности кодовых точек. Последовательность одной или нескольких кодовых точек, отображаемых в виде единый графический блок называется графема.

Если вам нужно получить длину в единицах графемы (а не символы, например mb_strlen сделал бы), вы можете использовать grapheme_strlen:

$emoji = "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F469}";
echo $emoji , " : " , strlen($emoji) , "\n"; // 27, count bytes
echo $emoji , " : " , mb_strlen($emoji) , "\n"; // 8, count characters
echo $emoji , " : " , grapheme_strlen($emoji) , "\n"; // 1, count grapheme units

https://3v4l.org/KSSl4


как потенциальное решение javascript (если вы не против добавления библиотеки), Lodash решил эту проблему в своем toArray модуль.

например,

_.toArray('12').length; // --> 3

или, если вы хотите выбить несколько произвольных символов из строки, вы манипулируете и присоединяетесь к массиву, например:

_.toArray("trimToEightGlyphs").splice(0,8).join(''); // --> 'trimToE'