0

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

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 ️&lt;/div>它工作正常。

我该怎么做才能将它存储在数据库中,并且选择/打印没有问题?

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

我已经尝试使用utf8_encodeand utf8_decode,但是没有用。

4

1 回答 1

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);
于 2020-12-04T10:06:36.827 回答