插入数据库php后,表情符号显示为问号

Vip*_*rma 4 php mysql unicode utf-8 utf8mb4

我知道这之前已经被问过很多次了,我几乎尝试了所有这些,但结果有所不同,所以请继续阅读!不要投反对票!正如我所说,我已经尝试了大多数解决方案!

我使用 utf8mb4 作为编码,character_set_connection 和 character_set_database 已设置为 utf8mb4。我网页中的字符集设置为 utf8。我使用过 PDO,当我打开与数据库的连接时,我使用 utf8mb4 作为字符集。表中的列也有 utf8mb4_unicode_ci 作为排序规则。使用的存储引擎是 MyISAM。

出现差异是因为我无法编辑 character_set_server(因为我在共享主机上),它默认设置为 utf8,默认情况下 collat​​ion_server 是 utf8_unicode_ui。我不能以任何方式改变这些。它在具有类似字符变量的 localhost 上运行良好。

编辑:
连接变量是 $conn 被打开
$db_server = 'localhost'; $db_name = 'userdb'; $db_encoding = 'utf8mb4'; $db_user = 'test'; $db_pass = 'password'; $conn = new PDO('mysql:host='.$db_server.';dbname='.$db_name.';charset='.$db_encoding,$db_user,$db_pass);
为获取输入的表单很简单
<form action="" method="POST" accept-charset="UTF-8"><input type="text" class="form-control" name="inp"></form>
并且输入被处理为
$test = $_POST['inp']; $it = $conn->prepare("INSERT INTO tbl_test(message) VALUES(?)"); $it->bindParam(1,$test,PDO::PARAM_STR); if($it->execute()) echo $test; else echo 'Error!';

那么问题来了:
1. 为什么我尽可能使用了utf8mb4和utf8mb4_unicode_ci,还是会出现这个问题?
2.这可能是一个 php 问题而不是一个 MySQL 问题,因为问题发生在数据库中的 INSERTION 期间(我对字符串使用了 stripslashes()、trim() 和 htmlspecialchars() 函数)?
3.有趣的是,表情符号(unicode 字符)在网站的一个页面(即聊天页面)上运行良好。可能是因为加密?似乎没有可能的解释!

在回答之前请记住,我已经尝试了几乎所有关于 SO 的解决方案,并且由于我在共享主机上,我无法编辑 MySQL 配置文件。请回答,我在这个问题上卡了 3 天多!

Vip*_*rma 11

在字符变量和 mysql 配置上浪费了大量时间后,我用一个简单的解决方案解决了这个问题,即 base64_encode.
传递输入字符串 base64_encode并稍后使用 base64_decode以显示它们在这种情况下有效。然而,字符串比之前占用的空间更多,但这个解决方案非常简单且值得。
我刚刚发布了这个问题,想知道是否有人遇到过类似的事情,但人们真的没有明白问题的要点。这就是 SO 上的人真正筋疲力尽的地方。无论如何,感谢您的帮助人!:)