将特殊字符转换为HTML实体

Abs*_*Abs 2 php character-encoding

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

<p><span>Copyright © 2008 Your Company Name</span>
Run Code Online (Sandbox Code Playgroud)

注意版权符号:

我加载HTML并在其上执行:

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

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

我希望版权符号被替换为&copy;&#169.这是不是mb_convert_encodingHTML-ENTITIES选项呢?

这是我正在使用的测试HTML文件.

Jon*_*Jon 8

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

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

$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ISO-8859-1');
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用类似的东西

$html = htmlentities($html, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');
Run Code Online (Sandbox Code Playgroud)

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

  • @Abs:不是.您应该*知道编码是什么,或者询问确定的来源(例如提供内容的服务器).编码"检测"本质上是hacky,并不总是正常工作.人类的等同物将用他们根本不知道的语言显示某人的文本并询问它是什么.你或许可以说它"最有可能是北欧",但这还不够好. (2认同)