所以我有一个博客,允许用户使用 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
谢谢!
Content-Type 标头设置为 charset=ISO-8859-1 而不是 UTF-8。
header("Content-Type: text/html; charset=utf-8");
这解决了问题。