Cómo configurar correctamente el soporte completo de UTF-8 desde PHP hasta MySQL y el navegador sin caracteres extraños
¡Hola a todos! Soy un desarrollador PHP principiante y ya llevo dos semanas sufriendo con el problema de las codificaciones. El sitio está en ruso, la base de datos es MySQL, todo parece estar configurado, pero al mostrar datos de la base de datos en la página aparecen signos de interrogación o caracteres extraños como "Р РµСально?".
Así es como me conecto a la base de datos:
$db = new mysqli('localhost', 'user', 'pass', 'mydb');
$db->query("SET NAMES cp1251");
Guardo los archivos en UTF-8 sin BOM, en el head de la página pongo <meta charset="UTF-8">. Pero cuando ingreso texto ruso a través de un formulario y lo guardo — en la base de datos se muestra normal, pero en la página no. Si ingreso datos directamente a través de phpMyAdmin, en la página se muestran correctamente.
Probé cambiar cp1251 por utf8 — entonces en la base de datos todo se rompe, pero en la página está bien. Probé SET NAMES utf8mb4 — dejó de funcionar por completo. ¿Qué estoy haciendo mal? ¿Cómo hacer para que el ruso funcione en todas partes: en la base de datos, en la página y al enviar formularios? ¿Quizás hay alguna lista de verificación o solución completa?