Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 写入/检索特殊字符ⓄⒼקร;到数据库_Php_Mysql_Encoding_Utf 8_Character Encoding - Fatal编程技术网

Php 写入/检索特殊字符ⓄⒼקร;到数据库

Php 写入/检索特殊字符ⓄⒼקร;到数据库,php,mysql,encoding,utf-8,character-encoding,Php,Mysql,Encoding,Utf 8,Character Encoding,我有一个表单需要接受特殊的字体字符并将它们写入数据库表。我相信编码在页面/表单级别设置正确,但当字段写入数据库时,字符会被更改为其他编码。其他答案似乎表明将编码设置为UTF-8就是答案,我已经完成了 现在,如果我将下面的字符直接复制粘贴到数据库表中,它可以很好地保存它们,如图所示。只有当我从表单中将它写入表中,或者当我检索它以在网页中显示时,它才会出现 示例字符:ⓄⒼקร 网页设置为: 表单标记包括属性:accept charset=“UTF-8” 插入之前的Php有:$\u POST['tag

我有一个表单需要接受特殊的字体字符并将它们写入数据库表。我相信编码在页面/表单级别设置正确,但当字段写入数据库时,字符会被更改为其他编码。其他答案似乎表明将编码设置为UTF-8就是答案,我已经完成了

现在,如果我将下面的字符直接复制粘贴到数据库表中,它可以很好地保存它们,如图所示。只有当我从表单中将它写入表中,或者当我检索它以在网页中显示时,它才会出现

示例字符:ⓄⒼקร

网页设置为:

表单标记包括属性:
accept charset=“UTF-8”

插入之前的Php有:
$\u POST['tag']=utf8\u encode($\u POST['tag'])


我以前没有编写/编码过这些类型的字体/特殊字符,所以我在这里做错了什么?

不要使用PHP
utf8\u encode()
utf8\u decode()
函数。

尽管这些函数的名字听起来很有希望,但实际上它们所做的是破坏UTF8文本——要么对UTF8文本进行双重编码,要么将文本转换为ISO8859-1编码,并用问号替换拉丁-1范围之外的字符


删除对
utf8\u encode()
的调用,确保您的数据库表具有正确的编码(
CHARACTER SET=utf8mb4
),您应该会没事的。

您如何知道它正在更改?你用什么客户机来阅读?所述客户机上的编码是什么?您是否检查了数据库排序规则?如果我将上述字符复制/粘贴到表单字段并提交,我会将其他ascii字符写入表中。但若我直接通过phpMyAdmin将这些相同的字符粘贴到表中,那个么它们将在phpMyAdmin中正确写入和显示。如果通过mysqli查询检索并显示在网页中,浏览器会给我ascii码或类似码。听起来像“双重编码”,或者至少是“Mojibake”;请参见@IvanBarayev-
排序规则中的内容
指的是排序,因此不相关<代码>字符集
指的是编码。我将数据库和所有表的联盟更改为
utf8mb4_general_ci
,我将
保留在表单提交页面的适当位置,我将表单标签保留为
,并注释掉
/$\u POST['tag]=utf8\u encode($\u POST['tag')结果是表在表中得到了
Ãа
,所以当我看到“提问”页面结构时,我注意到-页面没有声明字符集,表单也没有包含accept字符集属性,是否有任何原因导致这些项中的一项或两项在编码时损坏?
Ãθ
“双重编码”表示
。所以请看我的链接是前面的注释。同样,不要使用en/decode函数。