PHP显示中文字符:SET NAMES'utf8'无效

时间:2012-05-20 15:31:59

标签: php utf-8 cjk

我正在尝试使用我拥有的数据库,但我无法在其中显示中文字符。数据库实际上是一个MS Access文件,我用程序转换成了mysql。无论如何,很多行都有中文字符,我无法在任何浏览器中正确显示它们。

我可以正常显示中文字符,如果我使用phpmyadmin来查看表格,我也可以看到它们。我四处寻找这个问题的解决方案,在我看来,通常的解决方法是执行“SET NAMES'utf8'”查询,但这只会将显示的字符从问号更改为其他奇怪的符号。

如果我查看phpmyadmin collat​​ion,则为数据库和所有表格提供utf8_general_ci。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

对于MySQL DB,这解决了问题:

$dbh = mysql_connect($hostname, $username, $password);    
mysql_select_db($db, $dbh);    
mysql_set_charset('utf8', $dbh);

PDO解决方案:

$dbh = new PDO('mysql:host=$hostname;dbname=$db;charset=UTF-8', $username, $password);

答案 1 :(得分:0)

你必须确定一些事情:

  • 导入之前,您要使用的表的字符集必须设置为utf8。您还必须确保导入的数据实际上包含正确的utf8编码字符。
  • 在导入时,您必须指定已建立会话的字符集(例如,通过运行SET NAMES utf8;
  • 导入后,您应该编写一个小脚本,读取您知道其中包含特殊字符的行;脚本必须:
    • 使用header('Content-Type: text/plain; charset=utf-8');或您希望设置的任何mime类型
    • 为已建立的MySQL连接(utf8)
    • 设置正确的字符集

如果一切顺利,它应该正确显示您的数据。