我的一个客户有一个网站,已经完全被托管公司搞得一团糟,强制在整个数据库上设置一个字符集。我们以前在字符集方面遇到过麻烦,但现在它只是一部简单的戏剧!
到目前为止,我已经将字符集=utf-8添加到页面内容类型中,并将mysql连接的字符集设置为utf8。现在是时候替换所有字符了。到目前为止,我发现的是:
ö = ö
ë = ë
é = é数据库内部的数据是这样更新的:
UPDATE table SET `fieldname` = REPLACE(`fieldname`, 'ö', 'ö');现在我只需要找到所有乱码的完整列表。我尝试了一个搜索field LIKE '%Ã%'的MySQL查询,但是这将返回数据库中的所有记录。
谷歌也只是在其他遇到麻烦的人的一些主题中显示几个字符(主要是上面的3个),但是似乎没有这些字符的完整列表(或者至少是最常见的),我可以用来为我的客户查找和替换所有数据。
如果有人知道这个位置或者能够完成我的列表,作为回报,我会创建一个包含这些字符的页面来帮助其他人(除非已经有一个我不知道的列表)。
// EDIT:
它适用于最常见的欧洲字符,如éèë、áàä、öóo、as、ü,也许还有ringel-S (德语双S)。并不是说像ñorã这样的跨度符号,但如果它们在某个地方的列表中,那将是非常值得欣赏的。
// EDIT 2
我使用本文第1部分中的2个ALTER查询更新了MySQL数据库和表:http://developer.loftdigital.com/blog/php-utf-8-cheatsheet。到目前为止,我没有使用mb_函数,也没有像看起来那样进行任何MB配置。
文件中的头文件都设置为utf-8 (我仍然需要检查一些ajax脚本的头文件,不确定是否需要这样做,但这样做不会有什么坏处)。并且所有文件都保存为UTF8,没有物料清单。此外,通过将字符集设置为utf-8来更新PHPFreakMailer。
Bad enough我还是有这些奇怪的角色我没有想过他们会自己离开,但至少值得这样希望:-)那么我应该采取的最后一步是什么?是否继续使用替换查询并手动更改所有不同的字符?
提前感谢!
发布于 2011-05-12 17:49:38
这有点疯狂;您认为“??”是什么字符集?
看起来这实际上是一个正确的UTF-8序列(因为它是两个字节),您只是将其显示为ISO-8559-1。
编辑
基于你的评论,我认为有以下几点:
我认为(但实际上不是100%肯定的)正确的UTF-8二进制序列存储在数据库中。但由于该表被标记为ISO-8559-1,并且您请求自动转换字符集。因此,它认为它是ISO-8559-1 (看起来像奥卡),然后尝试将其转换为UTF-8。
如果strlen(‘’)是4而不是2,你应该能够验证这一点。如果长度确实是2,那么你的浏览器编码一定是搞错了。
要解决此问题,请不要将MySQL设置为编码字符。
选项2
数据也可以在表中进行“双重编码”。要检查这一点,只需检查数据库中的字符串长度。如果‘?’是4字节长,这就是问题所在。
在这种情况下,我的建议是不要试图制作一个大的“乱七八糟的字符”-map。您应该能够简单地'utf8_decode‘字符串。通常,此函数将输出ISO-8559-1字符串,但在您的示例中..它应该是原始的有效UTF-8字符串。
我希望这能起作用!
Edit2
好的,实际上,我认为已经发生的是选项2。用简单的(php)术语来说:
$output = utf8_encode(utf8_encode('string'));所以一个utf8_decode()应该足够了。
在运行迁移脚本之前对此进行测试:)
发布于 2011-05-12 17:39:57
如果他们强制改变了字符,为什么你的数据库没有被转换?您的表仍然是旧的字符集吗(请参阅您的phpMyAdmin on table信息)。
如果数据出现在你的phpMyAdmin中或者只出现在你的网页上,你的名字和排序规则应该改变,标题和文件类型(安全文件格式为-> -8)也应该改变。
或者尝试:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;只有当MySQL中没有剩余的选项时,我才会开始替换字符。
发布于 2011-05-12 21:35:40
既然你已经用" PHP“标记了这个问题,我假设你用PHP读取了数据库和它的值?如果是这样,如果您不再控制数据库,请查看mb_convert_encoding。
更好的解决方案是修复数据和表字符集之间的不一致。备份数据库(以防万一),并将所有表和列更改为UTF-8。注意:当使用MySQL时,没有足够的来更改表的字符集,您必须按列执行此操作。
https://stackoverflow.com/questions/5975938
复制相似问题