2012-04-24 22 views
2

我开发了一个PHP/MySQL应用程序,其中存储了一个表名。这些名称有时包含特殊字符(如é,à,ë,...)。再次... php-mysql导出UTF-8问题

当创建我忘了设定的搭配,项目为UTF-8,现在被设置为LATIN1_SWEDISH_CI表。 所以一些数据在phpMyAdmin中显示不正确。但是当我在PHP页面上显示这些名称时,这些特殊字符会正确显示。这里是我使用UTF-8的一个PHP文件的摘录

<?php ... ?> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content-"text/html; charset="UTF-8"> 
.... 

就像我说的那样,特殊字符是应该显示的。到目前为止......没问题。

但现在我想将数据导出到一个CSV文件和你猜怎么着?特殊字符不包含在CSV文件中。 我的PHP-出口文件包含以下几行代码:

<?php 
mysql_query("SET NAMES utf8"); 
header('Content-Type: text/html; charset=UTF-8'); 
... 

但不显示特殊字符?

有没有人有这个问题的解决方案?因为我发现在Excel中打开CSV并使用'查找&替换'有点荒谬。 使用HTML转码无法解决问题。这就是UTF-8的原因,不是吗?

+0

它们是否完全不在CSV文件中(即使在记事本中也没有)或Excel无法显示它们? Excel通常无法识别CSV文件的编码,因此您可能还需要考虑Excel是否正确配置。 – Daan 2012-04-24 10:43:38

回答

1

您已经存储了哪些方面的MySQL作为Latin-1的数据UTF-8编码的数据。 MySQL不会抱怨这种情况,因为任何字节序列都是有效的Latin-1。由于用于检索数据的连接的连接字符集与用于插入数据的连接字符集相同,因此正确的数据将显示在您的网页上。但是,如果您在实用程序中查看数据以便显示实际存储的字符,则会看到错误编码的文本,因为这是您实际存储的内容。

有你需要做两件事情:首先,你需要改变你的数据库连接代码,以确保你对数据库的所有连接都使用UTF-8字符集。这可以使用设置文件或每次连接时发出SET NAMES语句来完成。

其次,您需要更正已存储在数据库中的错误编码数据。 不要 alter table将字符集直接更改为UTF-8;如果你这样做,你最终会得到双UTF-8编码数据。相反,使用alter table查询将列更改为二进制字符集,然后再次将表更改为UTF-8。