Вопрос по unicode, php, regex – PHP найти Emoji [обновить существующий код]

5

Я пытаюсь обнаружить смайлики в своем php-коде и запретить пользователям входить в него.

Код у меня есть:

if(preg_match('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', $value) > 0)
{
    //warning...
}

Но это не работает для всех смайликов. Есть идеи?

Ваш Ответ

1   ответ
10
if(preg_match('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', $value) 

а не пытаться отслеживать последовательности байтов UTF-8. Использоватьuодификатор @ для обработки вашей строки UTF-8 на основе символов.

Смайлики кодируются в блоке U + 1F300 – U + 1F5FF. Тем не мение

имволы @many из наборов «emoji» японских носителей фактически отображаются на существующие символы Unicode, например, масти карт, знаки зодиака и некоторые стрелки. Считаете ли вы эти символы "эмодзи" сейчас?

до сих пор существуют системы, которые не используют недавно стандартизированные кодовые точки смайликов Unicode, а используют специальные диапазоны в Частной области использования. Каждый перевозчик имел свои собственные кодировки. iOS 4 использовала набор Softbank.Больше информации Вы можете заблокировать всю зону личного пользования.

например

function unichr($i) {
    return iconv('UCS-4LE', 'UTF-8', pack('V', $i));
}

if (preg_match('/['.
    unichr(0x1F300).'-'.unichr(0x1F5FF).
    unichr(0xE000).'-'.unichr(0xF8FF).
']/u'), $value) {
    ...
}
Привет, спасибо за эту идею, но она не работает для всех смайликов :) Есть ли способ добавить поддержку для этого: ❤? И, возможно, некоторые другие? Теперь он отлично работает для смайликов iOS. Спасибо Kukosk

Похожие вопросы