将特殊字符转换为HTML实体

时间:2012-05-01 10:43:38

标签: php character-encoding

我有一个HTML文件,当我在记事本中查看时,我可以看到以下内容:

<p><span>Copyright © 2008 Your Company Name</span>

请注意版权符号:

我加载HTML并在其上执行:

$html = file_get_contents('test.html');
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
file_put_contents('output.html', $html);

当我在记事本中再次查看html时,版权符号已消失并被空格取代?!

我希望版权符号替换为&copy;&#169。这不是具有mb_convert_encoding选项的HTML-ENTITIES吗?

这是我正在使用的test HTML file

2 个答案:

答案 0 :(得分:8)

您的测试HTML页面是以UTF-8编码;因此,当mb_convert_encoding看到版权字符(序数值169)时,它不知道如何处理它认为是无效的UTF-8序列。

因此,在调用mb_convert_encoding时,您应该指定正确的输入编码:

$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ISO-8859-1');

或者,您可以使用类似

的内容
$html = htmlentities($html, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');

注意:我正在直接回答您的问题,但您没有说明您需要转换的内容。可能有更好的方法来实现您的目标。

答案 1 :(得分:0)

如果你将你的html作为UTF-8服务,那么肯定是正确的行动:没有。

<p><span>Copyright © 2008 Your Company Name</span>

完全有效的HTML - 只需查看页面的页面来源。