htmlentities и é (е острый) - PullRequest
       37

htmlentities и é (е острый)

8 голосов
/ 05 октября 2011

У меня проблема с PHP htmlentities и символом é. Я знаю, что это какая-то проблема с кодировкой, которую я просто пропускаю, так что, надеюсь, кто-нибудь увидит, что я делаю неправильно.

Выполнение прямой htmlentities("é") не возвращает правильный код, как ожидалось (либо é, либо é. Я пытался заставить кодировку быть 'UTF-8' (используя параметр charset htmlentities), но то же самое.

Конечная цель - отправить этого персонажа в электронном письме в формате HTML в кодировке «ISO-8859-1». Когда я пытаюсь ввести его в эту кодировку, возникает та же проблема. В источнике письма вы видите é, а в представлении HTML é.

Кто может пролить свет на мою ошибку?

Ответы [ 4 ]

12 голосов
/ 05 октября 2011
// I assume that your page is utf-8 encoded
header("Content-type: text/html;charset=UTF-8");

$in_utf8encoded = "é à ù è ò";

// first you need the convert the string to the charset you want...
$in_iso8859encoded = iconv("UTF-8", "ISO-8859-1", $in_utf8encoded);

// ...in order to make htmlentities work with the same charset
$out_iso8859= htmlentities($in_iso8859encoded, ENT_COMPAT, "ISO-8859-1");

// then only to display in your page, revert it back to utf-8
echo iconv("ISO-8859-1", "UTF-8", $out_iso8859);
2 голосов
/ 05 октября 2011

Я добавил htmlspecialchars, чтобы вы могли видеть, что он действительно закодирован

http://sandbox.phpcode.eu/g/11ce7/4

<?PHP
echo htmlspecialchars(htmlentities("é", ENT_COMPAT | ENT_HTML401, "UTF-8"));
2 голосов
/ 05 октября 2011

Предлагаю вам взглянуть на http://php.net/html_entity_decode. Вы можете использовать это следующим образом:

$eacute = html_entity_decode("&eacute;",ENT_COMPAT,"iso-8859-1");

Таким образом, вам не нужно заботиться о кодировке php-файла. редактировать: опечатка

0 голосов
/ 05 октября 2011

Если вы сохранили специальные символы как é, вы можете использовать следующее вскоре после подключения к database.

mysql_set_charset('utf8', $dbHandler); 

При этом вам теперь не нужно использовать htmlentities при отображении данных.

...