I've seen this asked several times, but not with a good resolution. I have the following string:
$string = "<p>Résumé</p>";
I want to print or echo the string, but the output will return <p>R�sum�</p>
. So I try htmlspecialchars()
or htmlentities()
which outputs <p>Résumé<p>
and the browser renders <p>Résumé<p>
. I want it, obviously, to render this:
Résumé
And I'm using UTF-8:
header("Content-type: text/html; charset=UTF-8");
What am I missing here? Why does echo and print output a �
for any special character? To clarify, the string is actually an entire html file stored in a database. The real world application is not just that one small line.
The following worked for me when having a similar issue lately:
You can have a mix of PHP and HTML in your PHP files... just do something like this...
That should output
Résumé
just how you want it to.If you don't have short tags enabled, replace the
<?= $string ?>
with<?php echo $string; ?>
Try This
Input:
Output:
This works for me:
Create/edit
.htaccess
file with these lines:If you prefer create/edit
php.ini
:Sources:
After much banging-head-on-table, I have a bit better understanding of the issue that I wanted to post for anyone else who may have had this issue.
While the UTF-8 character set will display special characters on the client, the server, on the other hand, may not be so accomodating and would print special characters such as
à
andè
as�
and�
.To make sure your server will print them correctly, us the
ISO-8859-1
charset:This will print correctly:
àè
Edit (4 years later):
I have a little better understanding now. The reason this works is that the client (browser) is being told, through the response
header()
, to expect anISO-8859-1
text/html file. (As others have mentioned, you can also do this by updating your.ini
or.htaccess
files.) Then, once the browser begins to parse that given file into the DOM, the output will obey any<meta charset="">
rule but keep your ISO characters in tact.$str = "Is your name O\'vins?";
// Outputs: Is your name O'vins? echo stripslashes($str);