Pessoalmente, resolvi o mesmo problema adicionando após o código de conexão MySQL :
mysql_set_charset("utf8");
ou para mysqli:
mysqli_set_charset($conn, "utf8");
ou o equivalente OOP mysqli:
$conn->set_charset("utf8");
E às vezes você terá que definir o conjunto de caracteres php principal adicionando este código:
mb_internal_encoding('UTF-8');
No lado HTML do cliente, você deve adicionar os seguintes dados de cabeçalho:
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
Para usar os resultados JSON AJAX (por exemplo, usando jQuery), você deve definir o cabeçalho adicionando:
header("Content-type: application/json;charset=utf8");
json_encode(
some_data
);
Isso deve fazer o truque