Run this right after you connect to the database:
mysqli_query("SET NAMES utf8"); /* or mysql_query */
It is not enough to set the collation of the table to UTF-8, you also need to specify (with this query) the encoding that should be used during the communication between PHP and the MySQL server.
More details here: SET NAMES utf8 in MySQL?
Ensuring UTF-8 compatibility everywhere is tricky; my UTF-8 checklist is as follows:
- Make sure every source file is saved as UTF-8
- Ensure
<meta charset="UTF-8" />
is present on all pages
- Make sure every database table is set to use UTF-8
- Run
SET NAMES utf8
after connecting to the database
- Call
mb_internal_encoding("UTF-8")
at the beginning of the script and use mb_
string functions where possible