Drupal 6 db_query问题检索utf8字符

时间:2013-02-13 07:10:50

标签: utf-8 drupal-6

我对drupal 6有一个非常奇怪的问题,涉及检索UTF8字符集中的字符。有趣的是,似乎只有drupal API才能正确检索数据;当我使用mysqli和命令行直接获取数据时,一切似乎都没问题。

数据库和表设置为正确的字符集和排序规则,如下所示:

    mysql> show variables like "collation_%";
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql> show variables like "char_%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

当我从命令行检索数据时,一切似乎都没问题。

   mysql> select id, name from web_gfo_article_type;
   | 294 | ДОСЛОВНО                                                      |
   | 295 | EXAMEN                                                        |
   | 296 | REVISIÓN                                                      |

在我的一个自定义drupal模块中,使用drupal API(db_query)并使用直接方法,使用mysqli检索相同的数据。

直接方法:

$mysqli = new mysqli("localhost", "my_db_user_name", "my_db_password", "my_db_name");
$r = $mysqli->query("select id, name from web_gfo_article_type");

while ($row = $r->fetch_object()) {
    print('<br/>' . $row->id . ' ' . $row->name);
}

直接接近的结果:

294 ДОСЛОВНО
295 EXAMEN
296 REVISIÓN

使用drupal db API:

$r = db_query("select id, name from web_gfo_article_type");

while ($row = db_fetch_object($r)) {
    print('<br/>' . $row->id . ' ' . $row->name);
}

drupal db API调用的结果:

294 ДОСЛОВÐО
295 EXAMEN
296 REVISIÓN

正如您可以清楚地看到的,drupal db API如何检索数据存在严重错误,这导致UTF数据在呈现时被碾压。所有上述结果都显示在HTML页面中,其中元标题信息已被正确设置,即

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

有人能指出我正确的方向,可能会发生什么,做错了什么。非常感谢。

1 个答案:

答案 0 :(得分:0)

请确保您编写查询的.module文件(?)使用的是utf-8?

相关问题