UTF-8 encoded html pages show � (questions marks) instead of characters
Solution 1
When [dropping] the encoding settings mentioned above all characters [are rendered] correctly but the encoding that is detected shows either windows-1252 or ISO-8859-1 depending on the browser.
Then that's what you're really sending. None of the encoding settings in your bullet list will actually modify your output in any way; all they do is tell the browser what encoding to assume when interpreting what you send. That's why you're getting those �s - you're telling the browser that what you're sending is UTF-8, but it's really ISO-8859-1.
Solution 2
In my case, database returned latin1
, when my browser expected utf8
.
So for MySQLi I did:
mysqli_set_charset($dblink, "utf8");
See http://php.net/manual/en/mysqli.set-charset.php for more info
Solution 3
Tell PDO your charset
initially.... something like
PDO("mysql:host=$host;dbname=$DB_name;charset=utf8;", $username, $password);
Notice the: charset=utf8;
part.
hope it helps!
Solution 4
Check if any of your .php
files which printing some text, also is correctly encoding in utf-8
.
Solution 5
I'm from Brazil and I create my data bases using latin1_spanish_ci
. For the html and everything else I use:
charset=ISO-8859-1
The data goes right with é
,ã
and ç
... Sometimes I have to put the texts of the html using the code of it, such as:
Olá
gives me
Olá
You can find the codes in this page: http://www.ascii.cl/htmlcodes.htm
Hope this helps. I remember it was REALLY annoying.
leugim
Not much to say. Just one more blissfully ignorant random user
Updated on July 11, 2022Comments
-
leugim almost 2 years
I have the standard XAMPP installation on win7 (x64). Having had my share of encoding troubles in a past project where mysql encoding did not match with the php enconding which in turn sometimes output html in other encodings, I decided to consistently encode everything using utf-8.
I'm just getting started with the html markup and am allready experiencing troubles.
- My page is saved using utf-8 (no BOM, I think)
//update: It turns out this was NOT the case. The file was actually saved withISO_8859-1
. I later found this out thanks to Sherm Pendleys answer. I had to go back and change my project settings (which were set to "ISO-8859-1") to the desired "UTF-8". - php is set per .htaccess to serve .php-pages in utf-8 with:
AddCharset UTF-8 .php
- html has a meta tag specifying:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- To test I set used php
header('Content-Type:text/html; charset=UTF-8');
The page is evidently served in utf-8 (firefox and chrome recognize it as such) but any special characters such as
é
,á
or¡
will just show as�
. Also when viewing the source code.When dropping the encoding settings mentioned above all characters are rendered correctly but the encoding that is detected shows either
windows-1252
orISO-8859-1
depending on the browser.How come? I'm very puzzled. I would have expected the exact opposite behavior.
Any advice is welcome, thanks!edit: Hopefully this helps a bit more. This is the response header (as per firebug)
HTTP/1.1 200 OK Date: Sat, 26 Mar 2011 20:49:44 GMT Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By: PHP/5.3.1 Content-Length: 91 Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Content-Type: text/html; charset=utf-8
- My page is saved using utf-8 (no BOM, I think)