Au premier regard sur http://www.nicknettleton.com/ zine/php/php-utf-8-cheatsheet Je pense qu'il manque une chose importante (peut-être que j'ai oublié celle-ci). En fonction de votre installation et/ou de votre configuration MySQL, vous devez définir l'encodage de connexion afin que MySQL sache quel encodage vous attendez du côté client (c'est-à-dire que le client côté de la connexion MySQL, qui devrait être votre script PHP). Vous pouvez le faire en émettant manuellement un
SET NAMES utf8
requête avant toute autre requête que vous envoyez au serveur MySQL.
Si vous utilisez PDO côté PHP, vous pouvez configurer la connexion pour qu'elle émette automatiquement cette requête à chaque (re)connexion en utilisant
$db=new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
lors de l'initialisation de votre connexion à la base de données.