【问题标题】:UTF-8 is giving me question marksUTF-8 给了我问号
【发布时间】:2013-04-22 15:37:15
【问题描述】:

我有一个简单的 PHP 脚本,它搜索 mySQL 数据库并将结果输出给用户。我曾经使用ISO-8859-1 作为我的字符集,但建议使用UTF-8。但我无法从以前的字符集转换到新字符集。

为了澄清一些事情,我有:

  • 创建了一个以UTF-8 编码的数据库和表,排序规则为utf8_unicode_ci
  • 将我的 PHP 文件编码为 UTF-8
  • 将元字符集设置为UTF-8
  • 在 Lighty (Lighttpd) 中将所有文本 mime-types 设置为 UTF-8create-mime.assign.pl

现在,当我从数据库中检索带有öü 等字符的数据时,问题就出现了。如果我只执行echo "ö"; 而不从数据库中检索它,它就可以正常工作。那我猜数据库肯定有问题吧?

我尝试了以下方法,他们已经解决了我的问题:

  • 将元字符集设置为 ISO-8859-1(出于某种奇怪的原因,它可以工作,但会破坏回显的“ö”)。
  • 围绕输出设置utf8_decode() 函数。
  • mysql_select_db() 之后声明了以下mysql_set_charset('utf8');

我知道我找到了多种解决方案,但我只是不知道为什么没有它们就无法工作?在输出上使用utf8_decode()mysql_set_charset() 函数是不好的做法吗?

【问题讨论】:

  • 数据库连接器也是? .. 啊,不……是的,你需要在连接器上设置字符集(mysql_set_charset - 虽然这已被弃用,你至少应该使用 MySQLi),否则你会转换 utf-8在将数据库中的 iso 8859-1(MySQL 连接器的默认值)传递给 PHP 并最终传递给屏幕之前...这将导致 '?'
  • @CD001 为什么 MySQL 连接器默认为 ISO-8859-1?哦,好吧,猜猜这就是问题所在。将尝试在下面使用完全烘焙的答案。
  • 呵呵 - 是的,我知道...试试 php.net/manual/en/mysqli.set-charset.phpuk3.php.net/manual/en/function.mysql-set-charset.php 虽然,现在不推荐使用整个 mysql_* 函数。
  • 我知道它们已被弃用。只需花一些时间将我的脚本转换为使用mysqli_*。 :-P

标签: php mysql utf-8 character-encoding iso-8859-1


【解决方案1】:

MySQL 使用 UTF8 很有趣。您需要确保服务器以 UTF 运行并且连接也是如此

如果您可以修改服务器上的 my.cnf 文件,您可以将这些添加到 [mysqld] 部分并重新启动它

character-set-server = utf8
skip-character-set-client-handshake

您可以选择(或同样)使用

query("SET NAMES utf8");   

在发送/检索数据之前确保数据库期望传递 UTF8 数据

【讨论】:

  • 如果我编辑 my.cnf 文件,将尝试查看它是否有效。顺便说一句,SET NAMES 解决方案不是recommended (or that's what I've read in multiple stackoverflow posts)
  • 有更好的方法来实现设置名称的编码,但如果所有其他方法都失败(或者您受到托管服务提供商的限制),这是一个可能的解决方案。这就是我包含它的原因。我的建议是修改 my.cnf 文件以正确设置连接。
  • 但是character-set-server = utf8skip-character-set-client-handshake 就够了吗?我不应该在 [mysqld] 和 [client] 中都做 default-character-set=utf8,在 [mysqld] 下做 character-set-client=utf8 吗?
  • 我们只使用我提到的 2 并且来回传递 UTF8 就好了。
  • my.cnf 更改对我有用,谢谢!我让 utf8 在我的本地主机上完全工作,但它不能在生产服务器上工作。连接器是缺失的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多