За последние 24 часа нас посетили 19093 программиста и 1683 робота. Сейчас ищут 850 программистов ...

Emoji смайлы как устроены

Тема в разделе "PHP для новичков", создана пользователем Geratsreg, 1 июн 2015.

  1. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте, Вот уже 4 дня читаю про эти эмодзи но совершенно не могу понять саму суть этого, то есть как они работают
    В VK можно добавлять эмодзи символом типа "" или HTML типа "&#58386" почитав за эти эмодзи я не совсем понял что оно и откуда, решил брать из далека начал читать за кодировке, немного поняв суть кодировок и узнав за Unicode, мое воображение начало прорисовывать саму идею emoji, вернулся к тому откуда начал, то есть к самим эмодзи, уже были знания кодировок думал будет легче понять все остальное, но запутался еще больше, чем больше углублялся тем меньше понимал
    DoCoMo, KDDI, Google - emoji представлен в разном виде &#59178, &#60260, &#1041204 почему так?
    Вообщем я решил забить на это все дела и "упростить" вся для себя
    Сделать простую замену вида
    Код (PHP):
    1. $text = "Типа текст сообщения  эмодзи";
    2. $emoji_simb = array(
    3.         "" => '<span class="emoji emoji2600"></span>',
    4.         "☀" => '<span class="emoji emoji2600"></span>'
    5. );
    6. $text = str_replace(array_keys($emoji_simb), $emoji_simb, $text);
    7.  
    Но как оказалось все не так просто, символ вида "" не так просто сохранить в базе MySQL, в одной кодировке, а именно UTF-8 при сохранении в db оно просто обрезает текст после символа эмодзи типа "Типа текст сообщения  эмодзи" в db попадает только "Типа текст сообщения"
    Короче говоря может кто объяснить простыми словами как работать с этими эмодзи? Реально уже мозг взрывается от не понимания самой сути

    Много качал разных js библиотек для работы с эмодзи в том числе и от твиттера https://github.com/twitter/twemoji
    Нашел на php https://github.com/iamcal/php-emoji но оно работает походу только с шестнадцатеричными значениями типа 0x2600 а вот html'ьку уже не катит &#2600
    Но мне это совсем не помогло понять что это и как работает
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Это обычные символы юникода, в них нет ничего особенного. Только пихать их прямо в php-код - плохая идея. Мало того, что появляется зависимость от кодировки файла скрипта, так еще (потенциально) редактор может неожиданно отреагировать на символы с большим номером.
    Возможно, в этом причина реакции базы, еще варианты - не установлена кодировка соединения, или сравнение для таблицы или конкретного поля не utf8, при чем в данной ситуации предпочтительно использовать utf8_bin или utf8_unicode_ci, а не utf8_general_ci.
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  4. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Я понимаю что что это обычный символ юникода у них есть с вой номер (☀ - U-2600 или 0x2600 или &#9728)
    Но это же как бы стандарт и такой смайл эмодзи может прибыть из в не сайта, возможно какой-то пользователь android'a, ipad'a отправит его с клавиатуры emoji и оно должно отобразится на сайте в виде эмодзи который и задумал пользователь
    Вот я и не пойму как с этими эмодзи работать, как их парсили или заменять или что еще, а може их вообще нужно в байтах хранить?
    Помогите понять пожалуйста, а то совсем уже духом упал

    Добавлено спустя 3 минуты 35 секунд:
    utf8mb4, отображает в виде вопросов (??? ?? ?)
    Та и вообще допустим найду я нужную кодировку в базе, сохраню сообщение от пользователя вида "Текст сообщения  смайли типа эмодзи  все ок сохранено", а что мне дальше с этим делать то?
    Я не могу понять вообщем что мне делать с этим, как мне обрабатывать эти эмодзи?

    Добавлено спустя 1 минуту 49 секунд:
    Выручайте, а то совсем уже безнадега напала, уже крыша едет от этих эмодзи
    Я уже на эту тему столько статей прочитал, когда php изучал меньше чтения было
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а зачем их обрабатывать? пришли - сохранили. запрашивают - прочитали, отдали. всё остальное браузер пользователя делает.
     
  6. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Нет нет, вы не правильно поняли что мне нужно
    Вот в данной теме когда я пишу символ "" он же браузером не обрабатывается, а мне нужно чтобы выдало в виде картинки смайла эмодзи http://www.iemoji.com/emoji-cheat-sheet/all

    Добавлено спустя 3 минуты 40 секунд:
    вот например твиттера парсер js https://github.com/twitter/twemoji он обрабатывает html &#9728 и превращает их в картинки эмодзи
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Так символы откуда берутся? Графический символ, который видно на экране, хранится в шрифте под номером символа юникода. Соответственно если в шрифте нет символов емодзи, то будет заглушка.

    Добавлено спустя 54 секунды:
    Во всех шрифтах, в которых есть емодзи, они будут отображаться примерно одинаково. Как кирилица во всех шрифтах с кирилицей =)

    Добавлено спустя 1 минуту 33 секунды:
    а тот парсер по ходу картинки пнгшные поставляет
     
  8. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Вот символ "☀" графический, а вот он же в виде эмодзи [​IMG]
    Еще один "квадрат" уже квадрат вот он же в виде эмодзи [​IMG]
    Меня интересует как превратить "☀" в картинку

    Добавлено спустя 4 минуты 20 секунд:
    Даже тут db не принимает такие символы эмодзи сморите скрин http://cs627316.vk.me/v627316517/37ba/83eQbPJK36Y.jpg
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    В чем проблема заменить символы на картинки? По принципу вставки смайлов в текст. Алсо, можно все же использовать качественный эмодзи-шрифт http://emojisymbols.com/emojilist.php - не хуже картинок.
    Дамп структуры таблицы в студию
     
  10. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Мне нужно именно картинки, шрифты не подойдут
    По принципу смалов не выйдет, в базу не могу запхнуть эти символы, символ может иметь 2 вида вот типа как ВК http://vk.com/emoji_vk?w=page-42154384_44490007, вид квадрата и вид &#128522
    Я скрин сделал с этого форума года пытался отправить в сообщении квадратик ""

    Добавлено спустя 6 минут 41 секунду:
    Или вот пытаюсь вставить в db http://cs627316.vk.me/v627316517/37cc/SRatDAIStII.jpg
     
  11. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Этот квадратик - нечто иное, как "символ, отсутствующий в наборе шрифта"
     
  12. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Да именно так оно и есть, вот я и пытаюсь понять как другие решили это
    Типа я в ВК отправлю такой квадратик в сообщении "" он отображается в виде эмодзи значит что они както парсят все это дело или что делают?

    Добавлено спустя 2 минуты 57 секунд:
    Или точно так же я могу отправить эмодзи с андройда то есть с клавиатуры emoji, фишка в том что ВК схавает и отобразит этот смайл и не только ВК
     
  13. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
  14. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Выходит нужно обработать отправленный пользователем текст заменить все квадраты на ("" на :fire:), а потом на выходить уже обработать принципу обычных смайлов :)fire: => '<img src=....') или как вообще не понимаю
     
  15. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Да вы бы прочитали хоть статью, зря я скинул чтоль.
     
  16. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Статью я же читал
    Эти символы не получается сохранить с db http://cs627316.vk.me/v627316517/37cc/SRatDAIStII.jpg

    Добавлено спустя 4 минуты 23 секунды:
    вот тут реализовано подобное https://github.com/iamcal/php-emoji даже есть html_demo.php
    Но оно работает только если передать шестнадцатеричное число - 0x2600 и тут какраз работает ваш алгоритм
     
  17. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Это другой вопрос.
    Попробуйте htmlspecialchars() для добавления в бд.
     
  18. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Не катит
    Я подозреваю что все же в db оно попадает не в виде квадратов, а в виде смайлов как я писал выше, типа заменяет квадрат на :smile:, а потом на выходе :smile: заменяет на <img... или span с классом

    Добавлено спустя 1 минуту 3 секунды:
    Но в таком случае я не понимаю зачем писали такую вещь как https://github.com/iamcal/php-emoji
    Короче я запутался и совершенно не понимаю в этом )
     
  19. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Ну покажите ваш код, чё гадать то.
     
  20. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    У меня нету кода, так как я не разобрался в этом
    Я просто тыкал смыкал побывал проверял и все
     
  21. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    json_encode конвертирует символы юникода (кроме ASCII) в коды
    Код (Text):
    1. $str = 'Тут смайл  есть';
    2. $enc = json_encode($str);
    3. $enc = str_replace('\ue412', ':fire:', $enc);
    4. $str = json_decode($enc);
    5. echo $str;
     
  22. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Меня интересует реально как это делается
    Так-ли оно на самом деле делается или нет ?
    И как быть если пользователь решил добавить html кодом "&#59178" просто заменять на :fire: или?
    Я не огу понять пинцет работы этого дела )
    Я извиняюсь за назойливость но все же не получил еще ответ на свой вопрос

    Добавлено спустя 3 минуты 7 секунд:
    Как бы вам сказать так, вот мое воображение не прорисовывает всю идею работы эмодзи
    Для меня это чтото типа как устроена система вселенной )
     
  23. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    или
    Чтобы показать картинку, надо что-то заменить на картинку (не сложно, правда?) Это может быть ":fire:", "&#59178", "\ue412" или сразу "".

    На мой взгляд, текст сообщений лучше всего хранить в базе без всяких замен. Почему у тебя не сохраняется текст в базу - второй вопрос, вообще-то проблем быть не должно. Прочитай еще раз, что написано про кодировки базы в этой теме:
    Потом когда получаешь текст из базы, прогоняй его через json и заменяй utf-коды сразу на теги картинок. ИМХО это оптимальный вариант.
     
  24. Geratsreg

    Geratsreg Новичок

    С нами с:
    1 июн 2015
    Сообщения:
    12
    Симпатии:
    0
    Ладно всем спасибо за ответы, очень вам благодарный, буду побывать
     
  25. KRU

    KRU Новичок

    С нами с:
    18 окт 2018
    Сообщения:
    2
    Симпатии:
    0