PHP, MySQL and UTF-8?

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
Hello all,

I have UTF-8 characters in my database. They're there, I can see them in
a MySQL dump as well as in phpmyadmin.

When I retrieve this data from the db and output it via print(), all I get
is question marks. These come from the server because I see them also in
wget's output.

In phpmyadmin I see the correct characters in my db. When I insert them
literally in my HTML they come out as expected. When I print() them as string
literals in php, they come out correctly as well.

I think I'm opening the db correctly:

$c = new PDO("mysql:host=$host;dbname=$dbname;port=$port;charset=UTF-8",
            $user, $pass);

So ... how do I retrieve UTF-8 chars from a database?



Re: PHP, MySQL and UTF-8?

On 9/12/2011 12:46 PM, Robert Latest wrote:
Quoted text here. Click to load it

What version of PHP are you using?

Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.

Re: PHP, MySQL and UTF-8?

On 12 Sep 2011 16:46:13 GMT, Robert Latest wrote:
Quoted text here. Click to load it

Are you sure that you're retrieving them incorrectly and are not
printing them incorrectly instead? Write a programs to extract some
data that has UTF-8 multibyte characters in it and try printing the
bin2hex() of the string instead. And do it using the shell/CLI command
first so you can rule out the myriad browser/http server potential
problems. If the hex is correct for UTF-8 then you can stop looking at
the database connection as the problem and start looking at your
rendering of the characters. If it isn't, THEN you can start caring
about the database connection.

The pig is nothing but a giant dish which walks while waiting to be
        --Grimod de La Reynière

Re: PHP, MySQL and UTF-8?

1. Your <head> must have this:

     <meta http-equiv="content-type" content="text/html; charset=utf-8" />

2. If you load from template file and then print, your template file must be
saved in UTF-8 (I'm not sure if BOM must be present, try with or without
it) - UTF8 BOM is 0xEF 0xBB 0xBF -

3. Execute these queries before querying database rows (only once is

    SET NAMES utf8;

4. After the two above you should be able to retrieve them properly and
print them as the should be.

Does that help?

Re: PHP, MySQL and UTF-8?

Robert Latest wrote:

Quoted text here. Click to load it

As for the wget output, your console might not be UTF-8-compliant, or you
might not have declared the proper character encoding for the HTTP resource
and the resource type (e. g., HTML) requires you to escape them then, which
you also failed to do.

Quoted text here. Click to load it

This and
Quoted text here. Click to load it

suggests that the Content-Type header field of the HTTP response for your
Web site has the wrong value.  And I think that is a FAQ.

Danny Goodman's books are out of date and teach practices that are
positively harmful for cross-browser scripting.

Site Timeline