【发布时间】: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-8到create-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.php 或 uk3.php.net/manual/en/function.mysql-set-charset.php 虽然,现在不推荐使用整个
mysql_*函数。 -
我知道它们已被弃用。只需花一些时间将我的脚本转换为使用
mysqli_*。 :-P
标签: php mysql utf-8 character-encoding iso-8859-1