Давно пора запилить аналог
вот этого ответа.
А то же ведь раз в три дня один и тот же вопрос - кракозябры, вопросики, ромбики.
И везде одна и та же ересь про "meta charset" в ответах.
Именно в варианте чеклист, чтобы каждый проверял по конкретным пунктам, в которых
четко написано, что делать, вместо невнятного мычания "ну у меня там утээф и еще здесь и вот тута"
В Mysql
- Кодировка, которую надо выставлять, называется utf8mb4
- Что там стоит на "всей БД" абсолютно без разницы. Кодировка должна быть указана для таблиц (в отдельных случаях - для поля) при создании. Проверить можно командой
SHOW CREATE TABLE table_name
В PHP
- Должна быть быть выставлена кодировка соединения с БД
- в PDO через DSN
$dbh = new PDO('mysql:host=...;charset=utf8mb4');
- в mysqli
$mysqli->set_charset('utf8mb4');
В браузере
Для того, чтобы браузер корректно отображал кодировку, её надо указать
HTTP заголовках.
- Либо
default_charset = "utf-8"
в php.ini.
- Либо руками в коде
header('Content-Type: text/html; charset=utf-8');
Проверять в консоли разработчика: вкладка Сеть, кликаем на запрос, смотрим заголовки