user926367
user926367

Reputation:

mysql_fetch_array returns non-Unicode text

I've made a simple PHP page to get the POST data and fetch a sql query then print the result. I'm using the mysql_fetch_array function.

The code works great but the response is a non-Unicode text, and it returns something like this:

?????ABC?????

note that the database collation is UTF8 and data stored are shown correctly in phpMyAdmin. I even used this META tag in php page but it results the same:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

Any idea?!

Upvotes: 6

Views: 8180

Answers (3)

Farahmand
Farahmand

Reputation: 2991

Add these lines of code before the first query:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET SESSION collation_connection = 'utf8_unicode_ci'");

Or you can edit your mysql configuration to use utf8 by default. Check here for what you need to do.

Change MySQL default character set to UTF-8 in my.cnf?

UPDATE

The function mysql_query is deprecated, so mysqli object can be used like so:

$mysqli = new mysqli("localhost", "MYSQL_USER", "MYSQL_PASS", "MYSQL_DB");

$mysqli->query("SET NAMES 'utf8'"); 
$mysqli->query("SET CHARACTER SET utf8");  
$mysqli->query("SET SESSION collation_connection = 'utf8_unicode_ci'"); 

Upvotes: 17

Abhishek
Abhishek

Reputation: 836

mysql_set_charset('utf8', $link);

Where $link is a connection created with mysql_connect

Upvotes: 5

ARIF MAHMUD RANA
ARIF MAHMUD RANA

Reputation: 5166

Try using mb_internal_encoding("UTF-8"); for details http://php.net/manual/en/function.mb-internal-encoding.php

Upvotes: -1

Related Questions