【问题标题】:how to convert weird characters into emoticons in html如何将奇怪的字符转换为html中的表情符号
【发布时间】:2022-08-13 02:09:35
【问题描述】:

我从 microsoft word :) 复制并粘贴了一个表情符号,它变成了????并将其插入到 mysql 表中,其中表和字段具有字符集 utf8mb4 排序规则 utf8mb4_unicode_ci 和字段类型 longblob。表情符号作为表情符号插入到表格中。但是当我尝试在我的 html 页面中显示它时,它变成了这个奇怪的字符😊。我尝试使用htmlentitieshtmlspecialcharshtmlspecialchars_decode,但它们都不能正确显示表情符号。

  • LONGBLOB 列没有字符集或排序规则属性。你是说长文吗?
  • 以下是有关在 Web 演示文稿中启用 utf8 内容的一些重要读物:stackoverflow.com/questions/279170/utf-8-all-the-way-through
  • 最初该字段是长文本,但我在 SO 中读到,为了能够存储表情符号,该字段需要是 blob 类型。由于内容可能很长,我将其改为 longblob。在将其更改为 longblob 之前,我尝试了其他建议,即更改字符集和排序规则,所以我只是在这里提到它以防万一
  • 那个建议是不正确的。您可以将 utf8 存储在 CHAR(1) 中。使用 BINARY 或 BLOB 或其同级类型是行不通的,因为它们存储二进制字节,没有关联的字符集。
  • 好吧,我之前确实尝试过应用字符集和排序规则,但表情符号在 mysql 表中变成了????。只有在我将字段类型更改为 longblob 后,表情符号才被正确插入。

标签: html mysql encoding character-encoding


【解决方案1】:

原来htmlspecialchars_decode 不起作用,因为我也使用了loadHTML,所以我只需要将代码更改为:

$str = htmlspecialchars_decode($row['body']);

$doc = new DOMDocument();
// @$doc->loadHTML($str); // emoticons not shown properly
@$doc->loadHTML('<?xml encoding="utf-8" ?>' . $str); // emoticons is shown properly
... // some other processes
return $doc->saveHTML();

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2021-10-04
    • 1970-01-01
    • 2021-05-27
    • 2020-10-22
    • 2012-01-27
    相关资源
    最近更新 更多