0

我有一个到目前为止我无法解决的问题,我将不胜感激。

我有以下简单的代码:

<?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');

?>

第一个回显有效,而第二个返回一个空字符串。为什么会这样?

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

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

4

3 回答 3

1

第二种情况返回一个空白字符串,因为它在该字符串中遇到“无效的代码单元序列”。以下确实有效并返回除 unicode 字符之外的所有内容。

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

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

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

于 2012-07-19T12:55:17.270 回答
0

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

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

输出:

begrüßen zu dürfen
于 2012-07-19T12:51:25.010 回答
0

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

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

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

如果这显示了奇怪的字符,则有问题的文件未正确保存为 UTF-8。

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

于 2012-07-19T12:56:34.273 回答