我在php中有一个表单,它向mysql提交数据。
查看数据库中的数据,我可以看到大约2-3%的行包含编码错误的国际字符,例如“gu”ðrún“显示为”guã°rãºn”。
但是,另一个用户可能会在几分钟后提交相同的字符,在这种情况下,字符的编码是正确的
因此,似乎编码是依赖于计算机使用或其他一些因素,我不知道。
在html的头部,我有这样一个:
<meta charset="ISO-8859-1">
表格有:
<form autocomplete="on" method="post" action="index.php" id="form1" accept-charset="ISO-8859-1">
mysql列被设置为latin1_swedish_ci。
我还应该做些什么让大家都满意?
编辑:因为它被标记为重复,我在其他地方找不到这个问题的答案。我已经阅读了大量关于字符编码的信息,这使我有了目前的设置,但这并不能解释为什么2-3%的数据与其他数据的行为不同。
1条答案
按热度按时间xnifntxz1#
这种类型的错误称为mojibake。原因在这里讨论
但是。。。你似乎暗示有些行有mojibake,而其他行有很好的重音字符?如果是这样的话,那就是一个客户机错误——有些客户机使用的是拉丁语1,有些客户机使用的是utf8。在这种水平上混不好。
但是,如果你真的这样混合,一定要确保每个客户宣布
CHARACTER SET
适合它的字节。这最好通过连接参数完成,但也可以通过SET NAMES ...
. 下面是一些关于php的杂乱无章的注解自
eth
u-急性期确实存在于latin1
,有可能表列和/或客户机可以设置为latin1或utf8mb4,您可以考虑移动到utf8以便将来验证数据库。“来回改变”可能是危险的——特别是如果你用的是“错误的”
ALTER
. 请提供SELECT col, HEX(col) ...
. 十六进制Guðrún
: