【问题标题】:Issues with emoji display using PHP and MariaDB [duplicate]使用 PHP 和 MariaDB 的表情符号显示问题 [重复]
【发布时间】:2021-03-16 02:11:15
【问题描述】:

我正在尝试在屏幕上显示来自数据库的表情符号,但有些表情符号有效,有些则无效。

Database version: 10.5.4-MariaDB

Database Collation: utf8mb4_general_ci

Table charset: utf8mb4_general_ci

在 PHP 上,我使用的是简单的选择 (SELECT * FROM table_name)

表格有以下几行:

1 - Backlog ????️
2 - Prioritized ????
3 - Doing ✏️
4 - On Hold ⏰
5 - Done ✅
6 - Archived ????

(就是这样,直接的表情符号,没有编码)

当我尝试在选择结果集上执行“打印”或“回显”时,我得到了:

1 - Backlog ?
2 - Prioritized ?
3 - Doing ✏️
4 - On Hold ⏰
5 - Done ✅
6 - Archived ?

但是,如果我尝试将表情符号直接放在代码上,例如:<div class="title">Backlog ????️</div> 它工作正常。

如何将其存储在数据库中,并且选择/打印没有问题?

我真的不知道我是否做得对,是否应该在之前/之后编码/解码。

我已经尝试使用utf8_encodeutf8_decode,但没有成功。

【问题讨论】:

  • 丢失的字符都是更高级别的代码点,所以你没有在某处使用 utf8mb4 。 show create table whatever 带给你什么?
  • @miken32 感谢您的回答,您给了我一个方向,我找到了解决方案(我会在下面回答)
  • 列和连接需要指定为CHARACTER SETutf8mb4`,因为其中一些表情符号是4字节的。请提供SHOW VARIABLES LIKE 'char%';SHOW CREATE TABLE,以便我们进行验证。 (同时,编码/解码功能也无济于事。)

标签: php mariadb emoji charset


【解决方案1】:

首先,感谢@miken32 的指导。

我找到了适合我的解决方案:

在 PDO 连接上,我没有声明字符集集合,因此解决方案是:

发件人:

$connection_string = "mysql:host=localhost:3307;dbname=database_name";

收件人:

$connection_string = "mysql:host=localhost:3307;dbname=database_name;charset=utf8mb4;collation=utf8mb4_unicode_ci";

并且都保持不变:

$options = array(
                PDO::ATTR_PERSISTENT => true,
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
            );
new PDO($connection_string, $username, $password, $options);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2012-04-09
    • 1970-01-01
    • 2018-12-28
    • 2016-04-05
    • 2017-08-23
    • 2019-03-19
    相关资源
    最近更新 更多