【问题标题】:PHP displaying Chinese characters: SET NAMES 'utf8' not workingPHP显示汉字:SET NAMES 'utf8' not working
【发布时间】:2012-05-22 20:40:47
【问题描述】:

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

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

如果我在 phpmyadmin 中查看数据库和所有表的排序规则是 utf8_general_ci。

有什么想法吗?

【问题讨论】:

标签: php utf-8 cjk


【解决方案1】:

对于 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);

【讨论】:

  • 请停止使用古老的mysql_* 函数编写新代码。它们不再维护,社区已经开始 deprecation process 。相反,您应该了解prepared statements 并使用PDOMySQLi。如果您无法决定,this article 将帮助您选择。如果你想学习,here is a quite good PDO-related tutorial.
  • 感谢您的回答。但是我收到以下错误消息:警告:mysql_set_charset() 期望参数 2 是资源,在第 17 行的 C:\AppServ\www\hw9\hw9_a.php 中给出 null
  • Vishal:好的,我试过了,但不幸的是仍然只有奇怪的符号,比如这些:國語。还有其他想法吗?
  • 对我来说,我在一个通用连接文件中添加了上面的语句,我几乎包含在每个文件中。因此,现在当我插入或更新任何内容(例如 unicode 字符)时,在我的数据库中,具有正确 utf8 编码的内容将被保存。此外,当我从 db 中选择任何这些内容时,它会以正确的 utf8 编码在 html 中显示它。只需将上面的mysql_set_charset() 设置为插入/更新/选择代码所在的脚本通用。
  • 有效!我在标题和脚本中添加了这个 : mysql_set_charset('utf8',$dbh);谢谢大家:解决了!
【解决方案2】:

您必须确保以下几点:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 2019-04-06
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多