当在PHP中使用UTF8的hmtlspecialchars时,未显示变音符号

时间:2012-07-19 12:46:34

标签: php mysql utf-8

我有一个问题,到目前为止我无法弄清楚,我会感激任何帮助。

我有以下简单的代码:

<?php
header("Content-Type: text/html; charset=utf-8");

$body .= "begrüßen zu dürfen";

echo htmlentities($body);
echo htmlentities($body, ENT_COMPAT,'UTF-8');

?>

第一个echo工作,而第二个返回一个空字符串。为什么会这样?

变量$ body是一个固定字符串(如“begrüßen zu dürfen”和一些来自带有UTF-8的mysql数据库的文本的组合。如果我想正确显示数据库中的文本,我们称之为$ data,我需要使用htmlentities($data, ENT_COMPAT,'UTF-8');,所以我想我可以使用htmlentities($body, ENT_COMPAT,'UTF-8')来显示整个组合文本(部分来自DB和部分来自固定字符串)。但是,这不起作用。

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

第二种情况返回一个空字符串,因为它遇到该字符串中的“无效代码单元序列”。以下方法可以正常工作并返回除unicode字符以外的所有内容。

echo htmlentities($body, ENT_QUOTES | ENT_IGNORE ,"UTF-8");

ENT_IGNORE默默地丢弃无效的代码单元序列,而不是返回空字符串。

您遇到无效序列的原因是因为您的php文件的编码不正确。

答案 1 :(得分:0)

检查您的文件是否保存为UTF8,这对我来说恰到好处:

header( "Content-Type: text/html; charset=utf-8" );
$body = "begrüßen zu dürfen";
echo htmlentities( $body );

输出:

begrüßen zu dürfen

答案 2 :(得分:0)

您必须将您的php文件保存为UTF-8,而不是CP1252。

要测试您是否正确执行,请尝试:

<?php
header("Content-Type: text/plain; charset=utf-8");
die("öäå");

如果显示奇怪的字符,则相关文件未正确保存在UTF-8中。

请注意,如果您正确使用UTF-8,则无需使用htmlentities。