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

我知道这个问题已经被问过很多次了,我几乎尝试了所有方法,但是情况有所不同,所以请继续阅读!不要投票!正如我所说,我已经尝试了大多数解决方案!

我已将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问题,因为该问题发生在数据库插入期间(我对字符串使用了stripslashes(),trim()和htmlspecialchars()函数)?
3.有趣的是,表情符号(unicode字符)在网站的一个页面(即聊天页面)上可以很好地工作。难道是由于加密?似乎没有可能的解释!

请记住,在回答我已经在SO上尝试了几乎所有解决方案之前,由于我位于共享主机上,因此我无法编辑MySQL配置文件。
请回答,我被坚持超过3天了!

参考方案

在用字符变量和mysql配置浪费大量时间后,我用一个简单的解决方案base64_encode解决了该问题。
通过base64_encode传递输入字符串,然后使用base64_decode表示它们在这种情况下有效。但是,字符串比以前占用更多的空间,但是此解决方案确实很简单,值得使用。
我只是发布了这个问题,以了解是否有人曾经遇到过类似的问题,但是人们确实没有理解这个问题的重点。那是SO员工真正精疲力尽的地方。无论如何,谢谢您的帮助! 🙂

PHP:将数组值加在一起 - php

我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…

PHP JQuery复选框 - php

我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(&#…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…