Php 写入/检索特殊字符ⓄⒼקร;到数据库
我有一个表单需要接受特殊的字体字符并将它们写入数据库表。我相信编码在页面/表单级别设置正确,但当字段写入数据库时,字符会被更改为其他编码。其他答案似乎表明将编码设置为UTF-8就是答案,我已经完成了 现在,如果我将下面的字符直接复制粘贴到数据库表中,它可以很好地保存它们,如图所示。只有当我从表单中将它写入表中,或者当我检索它以在网页中显示时,它才会出现 示例字符:ⓄⒼקร 网页设置为: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
表单标记包括属性:accept charset=“UTF-8”
插入之前的Php有:$\u POST['tag']=utf8\u encode($\u POST['tag'])代码>
我以前没有编写/编码过这些类型的字体/特殊字符,所以我在这里做错了什么?不要使用PHPutf8\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函数。