【问题标题】:Drupal 6 db_query issue retrieving utf8 charactersDrupal 6 db_query 问题检索 utf8 字符
【发布时间】:2013-02-13 07:10:49
【问题描述】:

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 数据库 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" />

有人可以为我指出可能发生的事情和做错的事情的正确方向吗?非常感谢。

【问题讨论】:

  • 您的settings.php 文件是如何配置的?你有一个$db_url 变量,它看起来怎么样?当然我们不需要凭证,只对格式感兴趣。是不是这样$db_url = 'mysqli://username:password@localhost/databasename';
  • Max - 是的,我的数据库 url 就像你指出的那样:$db_url = 'mysqli://mydbusername:mydbpassword@localhost/mydbname';
  • 奇怪,因为在这种情况下 Drupal 函数(db_querydb_fetch_object)只是 PHP 中 mysqli 函数的包装。而那些似乎正在返回正确的结果......
  • 这可能是一个很长的镜头,但你能把表名放在大括号中,看看你得到了什么:$r = db_query("select id, name from {web_gfo_article_type}");

标签: utf-8 drupal-6


【解决方案1】:

只需确保您编写查询的 .module-file(?) 使用的是 utf-8 吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2015-11-23
    • 2020-12-22
    相关资源
    最近更新 更多