emojis在插入到数据库php之后显示为问号

0yg35tkg  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(409)

我知道这个问题已经被问过很多次了,我几乎试过所有的问题,但结果不一样,所以请继续读下去!不要投反对票!正如我所说,我已经尝试了大多数的解决办法!
我使用utf8mb4作为编码,字符集连接和字符集数据库被设置为utf8mb4。我的网页中的字符集设置为utf8。我使用了pdo,当我打开到数据库的连接时,我使用utf8mb4作为字符集。表中的列也有utf8mb4\u unicode\u ci作为排序规则。使用的存储引擎是myisam。
出现这种差异的原因是我无法编辑字符集服务器(因为我是共享主机),默认情况下它设置为utf8,而排序规则服务器默认情况下是utf8\uunicode\uui。我无论如何也不能改变这些。它在具有类似字符变量的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\u unicode\u ci,问题也会出现?
2.这可能是php问题而不是mysql问题,因为问题发生在数据库中的插入过程中(我对字符串使用了stripslashes()、trim()和htmlspecialchars()函数)?
3.有趣的是,emojis(unicode字符)在网站的一个页面(即聊天页面)上运行良好。可能是因为加密吗?似乎没有可能的解释!
在回答之前请记住,我已经尝试了几乎所有的解决方案,因为我是共享主机,我不能编辑mysql配置文件。请回答,我被困在这个超过3天!

qltillow

qltillow1#

在浪费了大量时间在字符变量和mysql配置上之后,我用一个简单的解决方案解决了这个问题 base64_encode .
将输入字符串传递给 base64_encode 以后使用 base64_decode 来证明他们在这个案子中起了作用。然而,字符串比以前占用更多的空间,但这个解决方案非常简单和有价值。
我发布这个问题是想知道是否有人遇到过类似的事情,但人们真的不明白问题的要点。这就是为什么人们会很累的地方。不管怎样,谢谢你们的帮助!:)

drkbr07n

drkbr07n2#

有很多东西需要申报 utf8mb4 --列、连接、窗体等等。很快,看起来所有这些都是你做的。
看看这个问题的起因:utf-8字符的问题;我看到的不是我储存的
你说的是2 character_set 变量,但不是所需的3个变量:

| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_results    | utf8mb4                    |

查看php.ini是否 default_charset UTF-8 不要使用任何形式的编码/解码,它只是避免解决问题。
请给我们看看 echo bin2hex($text); 来点表情。

相关问题