Поддержка символов Emoji в браузерах становятся все полнее и полнее, но на сайтах использующие PHP и MySQL символы могут не поддерживаться из-за неправильной кодировки, в результате выводятся одни ??? вместо 😺😸😹.
Так-как эмодзи являются символами юникода, то все скрипты и страницы сайта должны быть в кодировке UTF-8.
Перед началом сделайте бэкап сайта и базы данных, далее по пунктам:
1. В PHP при подключении к БД нужно указать кодировку utf8mb4
:
В PDO имеется возможность указать кодировку при подключении:
$dbh = new PDO('
mysql:dbname=db_name;host=localhost',
'user',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'")
);
Если используется расширение MySQL:
$link = mysql_connect('localhost', 'user', 'password');
mysql_select_db('db_name');
mysql_query("SET NAMES 'utf8mb4'");
Или MySQLi:
$mysqli = new mysqli('localhost', 'user', 'password', 'db_name');
$mysqli->query("SET NAMES 'utf8mb4'");
2. В MySQL тексты обычно хранятся в кодировке utf8_general_ci
, эта кодировка не поддерживает эмодзи, поэтому нужно перекодировать их в utf8mb4_general_ci
.
Запрос на перекодировку нужно сделать единоразово для всех таблиц базы, у которых планируется использование символов. Запрссы можно выполнить в PhpMyAdmin.