【问题标题】:Why do i have to use set_charset("utf8") even though everything is utf-8 encoded? (MySQLi-PHP)为什么我必须使用 set_charset("utf8") 即使一切都是 utf-8 编码的? (MySQLi-PHP)
【发布时间】:2011-04-04 01:25:43
【问题描述】:

我的表的排序规则是 utf8_general_ci。

我的页面使用 UTF-8 编码(没有 BOM)。

在我的页面中,我的 Equiv 元标记将字符集设置为 utf8

我的数据中有土耳其语字符。

当我输出它们时,它并没有按应有的方式显示它们,但是当我执行 $db->set_charset("utf8"); 时,它可以工作。

为什么我必须使用$db->set_charset("utf8");,即使所有内容都是 utf-8 编码的?

【问题讨论】:

  • 与您的要求无关,但您是否在 HTTP 响应中设置了 Content-type 中的字符集?
  • 我用这个:<meta http-equiv="Content-Type" content="text/html;charset=utf8" />
  • 是的,但您应该在 HTTP 标头中进行设置。

标签: php utf-8 mysqli character-encoding collation


【解决方案1】:

data 在 MySQL 中存储为 UTF-8,但 PHP 的客户端连接排序规则不是。这就是为什么您必须在 PHP 中使用set_charset 进行数据库连接的原因。

更新

php.ini:default_charset utf-8
.htaccess:AddDefaultCharset utf-8

【讨论】:

  • 谢谢,但我可以通过 php.ini 或类似的方式更改它吗?
  • 我查看了我的 mysql 服务器的变量,所有排序规则和编码都设置为 utf-8,所以我知道问题不在于 mysql 服务器。感谢您的更新:我在 PHP.net 页面 (php.net/manual/en/ini.core.php) 中检查了 php.ini 变量的定义,它与 header('Content-type:utf-8') 和 <meta content="charset=utf-8" /> 相同我还检查了这个: php.net/manual/en/ini.list.php 我找不到任何 mysql.default_charset 变量,所以我想我会使用那个“set_charset”函数。感谢您的回复,我很感激。
  • @Dada:我在the php.ini documentation的“数据处理”下找到了default_charset
猜你喜欢
  • 2012-05-07
  • 2022-12-15
  • 2020-05-21
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多