我有一个问题,到目前为止我无法弄清楚,我会感激任何帮助。
我有以下简单的代码:
<?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和部分来自固定字符串)。但是,这不起作用。
知道如何解决这个问题吗?
答案 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。