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