为什么用PHP净化html后表情符号和特殊字符无法正常显示?

问题描述 投票:0回答:1

所以我有一个博客,允许用户使用 TinyMCE 在一个位置编写内容。然后内容被清理、验证并存储在数据库中。它显示在不同的页面上。相当标准。但是,我允许用户使用表情符号和特殊字符。在存储正文内容之前,我通过 HTMLPurifier 运行它,然后在显示之前通过 HTMLPurifier 运行它第二次。

这是数据库之前净化body内容的代码

//Purify the body HTML
$purifier = new HTMLPurifier();
$news_data['body']['clean'] = $purifier->purify($news_data['body']['raw']);

表情符号在数据库中正常显示,但即使将原始数据输出到网页,我也得到相同的奇怪数据(参见屏幕截图)

这是显示代码:

$purifier = new HTMLPurifier($config);
$purified_body = $purifier->purify($row['body']);
$clean_body = html_entity_decode($purified_body, ENT_QUOTES, 'UTF-8');

我的输出:

那么,如果我的表情符号和特殊字符在数据库中正确显示,为什么它们无法正确显示?

编辑: 我检查了一下,数据库排序规则设置为 utf8mb4_unicode_ci

谢谢!

php html htmlpurifier
1个回答
0
投票

Content-Type 标头设置为 charset=ISO-8859-1 而不是 UTF-8。

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

这解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.