View file xmyx.ru/sys/inc/classes/class.emoji.php

File size: 3Kb
<?php

/*
 *
 * EMOJI class for Dcms-Social
 *
 * @link http://koder-alex.ru
 * @autor koder_alex
 * @version 1.5
 *
 */

class emoji
{
    /*
     * Метод деширования символов в строке
     * А так же вывод найденных эмоций
     */
    static function smile($msg)
    {
        return self::emojiUnicodStringDecode($msg);
    }

    /**
     *
     * Метод преобразования кодировки символов
     */
    private static function emojiStringEncoding($string, $format = "%x")
    {
        $binary = mb_convert_encoding($string, 'UTF-32BE', 'UTF-8');
        $string = vsprintf($format, unpack('N', $binary));

        return $string;
    }

    /**
     * кеш эмоций
     */
    private static $emojiUni = array();
    /**
     *
     * Метод дешифрования юникода в строке
     */
    private static function emojiUnicodStringDecode($string)
    {
        return preg_replace_callback('/[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}-\x{2b1c}\x{3297}\x{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]/ui', function ($m) {

            if(isset(self::$emojiUni[$m[0]]) === true) {
                return self::$emojiUni[$m[0]];
            }

            $entity = self::emojiStringEncoding($m[0]);
            self::$emojiUni[$m[0]]= '<img src="/files/images/blank.gif" alt="'.$m[0].'" class="emoji-icon emo-' . $entity . '">';
            return self::$emojiUni[$m[0]];
        }, $string);
    }

    /**
     * Метод с дешифрованием все поступающий POST данных
     */
    static function dataDecode()
    {
        if (getenv('REQUEST_METHOD') === 'POST' || empty($_POST) === false) {
            $_POST = array_map(function($string) {
                return preg_replace_callback('/[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}-\x{2b1c}\x{3297}\x{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]/ui', function ($m) {
                    return '&#x' . self::emojiStringEncoding($m[0]) . ';';
                }, $string);
            }, (array)$_POST);
        }
    }

    static function showContent() {
        ?>
        <span id="toggle_emoji" class="cp_sticker_btn cp_inline_attach_btn">
            <i id="koder_alex_emoji" class="EmojiButton" onclick="Emoji.emojiToggle(); return false;" width="26" height="26"></i>
        </span>
        <?
    }
}