为什么PHP函数htmlentities(...)返回错误结果?

4

我有以下代码:

function testAccents() {
    $str = "àéè";
    $html = htmlentities($str);
    echo $html;
}

当我运行它时,我得到的不是“àéè”,而是“à©Ã¨”。我认为这可能是编码问题,但文件是utf-8格式。
> file -bi PublicationTest.php 
  text/x-c++; charset=utf-8

为什么我会得到这个奇怪的结果?
编辑:我使用PHP 5.3版本。

看起来确实是编码问题。尝试使用Notepad++或TextMate重新编码它。 - Bgi
1
该死,本来应该说这个文件不是utf8编码的。你正在使用哪个版本的php?尝试使用htmlentities($str, ENT_COMPAT | ENT_HTML401, 'UTF-8')。 - trampi
我以为PHP使用UTF-16来处理字符串? - Alvin Wong
1个回答

15

在 PHP 5.4.0 之前,htmlentities() 默认期望 ISO-8859-1 编码数据。它会把你的 UTF-8 输入解释为单字节字符,导致输出结果出现问题。

要明确指定编码。

$html = htmlentities($str, ENT_COMPAT, "UTF-8");

还有一些好东西在这里:http://www.php.net/manual/en/function.htmlentities.php#106929 - Sohail Ahmed
@Dark 是的,它只需要在 PHP < 5.4.0 版本中。 - Pekka
谢谢你的帮助。它工作得很好,只是在PHP 5.3中没有ENT_HTML401,只有ENT_COMPAT。 - Barth
@Barth,那就把那个删掉吧——我只是从函数定义中复制并粘贴了“默认”值(似乎也适用于5.4)。 - Pekka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接