htmlentities和é(急性)

时间:2011-10-05 15:26:11

标签: php character-encoding html-entities

我遇到了PHP htmlentities和é字符的问题。我知道这是一种我只是忽略的编码问题,所以希望有人能看出我做错了什么。

运行直线htmlentities("é")并未按预期返回正确的代码(éé。我已尝试强制将字符集设为'UTF-8'(使用htmlentities的charset参数)但同样的事情。

最终目标是将此字符发送到以“ISO-8859-1”编码的HTML电子邮件中。当我试图强制它进入该编码时,同样的问题。在电子邮件的来源中,您会看到é,并在HTML视图中é

谁可以解释我的错误?

4 个答案:

答案 0 :(得分:12)

// 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);

答案 1 :(得分:2)

我建议你看看http://php.net/html_entity_decode。您可以通过以下方式使用它:

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

这样您就不必关心php文件的编码了。 编辑:错字

答案 2 :(得分:2)

我已经为你添加了htmlspecialchars,以确定它是真正编码的

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

<?PHP
echo htmlspecialchars(htmlentities("é", ENT_COMPAT | ENT_HTML401, "UTF-8"));

答案 3 :(得分:-3)

如果您将特殊字符存储为é,则可以在连接到database后立即使用以下内容。

mysql_set_charset('utf8', $dbHandler); 

有了这个,您现在不需要在显示数据时使用htmlentities