En el primer vistazo a http://www.nicknettleton.com/ zine/php/php-utf-8-cheatsheet Creo que falta una cosa importante (tal vez pasé por alto esta). Dependiendo de su instalación y/o configuración de MySQL, debe configurar la codificación de conexión para que MySQL sepa qué codificación está esperando en el lado del cliente (es decir, el cliente lado de la conexión MySQL, que debería ser su script PHP). Puede hacerlo emitiendo manualmente un
SET NAMES utf8
consulta antes de cualquier otra consulta que envíe al servidor MySQL.
Si está utilizando PDO en el lado de PHP, puede configurar la conexión para emitir automáticamente esta consulta en cada (re)conexión usando
$db=new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
al inicializar su conexión db.