这个问题在这里已有答案:
我有一个表单,需要接受特殊的字体字符并将它们写入数据库表 . 我相信编码是在页面/表单级别正确设置的,但是当字段写入数据库时,字符会更改为其他编码 . 其他SO答案似乎表明设置编码为UTF-8就是答案,我已经完成了 .
现在,如果我复制粘贴下面的字符,直接到数据库表,它会保持它们正常,如图所示 . 它只有当我从表单写入表或当我检索它以在网页中显示时 .
示例字符:ⓄⒼקร
网页设置为: <meta charset="utf-8">
表单标记包含属性: accept-charset="UTF-8"
在插入INSERT之前的Php: $_POST['tag']=utf8_encode($_POST['tag']);
我之前没有必要编写/编码那些类型的字体/特殊字符,所以我在这里做错了什么?
1 回答
Do not use the PHP utf8_encode() or utf8_decode() functions.
尽管它们的名称很有说服力,但这些函数实际上做的是破坏UTF8文本 - 通过双重编码UTF8文本,或者通过将文本转换为ISO8859-1编码并用问号替换Latin-1范围之外的字符 .
删除对
utf8_encode()
的调用,确保您的数据库表具有正确的编码(CHARACTER SET = utf8mb4
),您应该没问题 .