Я хотел бы, чтобы пользователь мог вводить смайлы в форму, поэтому я установил для своей базы данных параметры сортировки utf8mb4_unicode_ci, чтобы можно было хранить смайлы.
Безопасность очень важна для меня, поэтому я выполняю несколько проверок как на стороне клиента, так и на стороне клиента. серверная часть для различных вещей.
Одна из проверок, которые я выполняю, — это проверка длины ввода. Мне было интересно, можете ли вы помочь, потому что результаты длины несовместимы на стороне клиента и сервера (поскольку строка содержит смайлы).
При использовании свойства JavaScript .length и также встроенные валидаторы угловых форм, называемые minLength и maxLength. Я вижу, что все они вычисляют длину одинаково (например, большинство базовых смайлов-смайликов рассчитываются как имеющие длину 2) .
Однако, когда я отправляю эти данные (включая смайлы) на сервер, я использую метод PHP под названием mb_strlen($subject, 'utf8'), и значения разные (большинство базовых смайлов имеют длину 1, а также занимают в базе данных 1 символ varchar).
Я протестировал около 160 emojis, чтобы увидеть, какие значения они возвращают как на стороне клиента, так и на стороне сервера, чтобы попытаться разработать шаблон (чтобы я мог правильно проверять длину).
Как как вы можете видеть на моих скриншотах ниже, в большинстве случаев mb_strlen($subject,'utf8') возвращает меньшее значение длины, чем JavaScript .length. Иногда оно возвращает то же значение, что и свойство JavaScript .length, но во всех этих случаях mb_strlen($subject,'utf8') никогда не возвращало длину, большую, чем возвращает JavaScript .length.


Безопасно ли это предположить, что mb_strlen($subject,'utf8') никогда не вернет значение, превышающее JavaScript .length. для остальных существующих смайлов, которые я не проверял?
Если нет, не могли бы вы объяснить немного больше об этом и привести несколько примеров символов, где mb_strlen($subject,'utf8' ) вернет большее значение, чем JavaScript .length?
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/791 ... ascript-le