2011-10-12 93 views
0

我有一个讨厌的字符编码问题,并寻找如何解决它的想法。存储在我的数据库中的不同字符编码

我一直在latin1_swedish_ci格式维护过去几年的数据库。一切正常。当在PHPMyAdmin中检查varchars时,我可以看到类似ë的口音,并在前端显示正确。

现在最近我把我的应用程序切换到UTF-8。我也将我的HTML页面的字符编码设置为UTF-8,但不是我的数据库。问题开始浮出水面。有时编码正确的字符,有时不是。

现实情况是,最近存储的varchars显示为很好,旧的varchars(在切换到UTF-8之前)显示为黑色方块。如果我将页面的字符编码切换到ISO8859-1,会发生相反的情况。旧特殊字符显示正常,新特殊字符显示为黑色正方形。

所以现实是我的数据库存储的特殊字符与以前不同。我怎样才能在不破坏事情的情况下清理这个混乱?

+0

你是否真的是数据库?除非您尝试将Unicode字符存储在非Unicode兼容数据类型中,否则我不认为整理(这是什么'latin1_swedish_ci')是一个问题? – Widor

+0

你必须通过UTF-8整个管道,这意味着你的数据库转换为UTF-8。否则,你正在通过一个圆孔推一个方形钉。那或者为每个查询进行字符集转换,这会变得很痛苦。在数据库中进行一次性批量转换为utf-8,问题应该解决。 –

+0

嘿马克,但如果我将我的数据库转换为UTF-8,不会显示正确显示的特殊字符?或者他们会被单独留下,因为他们已经是UTF-8了? – bart

回答

1

你可以尝试这样的:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 

$string = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $string); 

,看看编码的字符切换。

相关问题