我使用CakePHP与App.encoding设置为UTF-8, <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
存在于我<head>
和我的MySQL数据库设置为UTF-8编码的Unicode和utf8_general_ci归类。 我也有"encoding"=>"UTF8"
在我为database.php连接的细节。
当我存储在数据库表中的“£”符号并查看它使用命令行的MySQL,字符显示正确。
如果我使用CakePHP在我的网站获取从数据库表并输出其行,我看到£
而不是我的意图的£
象征。
但是,如果我再使用utf8_decode()
输出我的数据,它显示正确。
这个对吗? 我已经使用ヶ辆()到£符号转换成试图£
但它输出£
代替! 甚至当我使用额外的参数字符集。
也许有人能帮助 - 我必须在这里错过了什么,但我认为字符应该正确显示(像textarea的HTML标签的东西),如果所有的标题,meta标签等都是一致的UTF-8?
您可以使用ヶ辆与第三个参数安全编码UTF-8:
htmlentities("£", ENT_COMPAT, "UTF-8")
这听起来像在数据库中的数据是错误的:性格£实际存储为两个字符£。 您可以通过进入数据库,并使用十六进制和字符集功能证实了这一点:
select charset(MyColumn), hex(MyColumn) from MyTable;
如果列以UTF-8编码,值“£”你应该看到到该输出相同的:
+---------------+-----------+
| utf8 | C2A3 |
+---------------+-----------+
如果你看到任何东西,就像如果字符集列报告LATIN1或者十六进制列报告C382C2A3,在表中的数据是错误的。 它虽然可以修复,但修复取决于错误的类型的数据了。 什么?你怎么得charset
和hex
?
如果一切UTF8删除"encoding"=>"UTF8"
在你的database.php中连接的详细信息:
$conn = mysql_connect($server, $username, $password);
//mysql_set_charset("UTF8", $conn); // REMOVED. ;)
mysql_select_db($database, $conn);
文章来源: Why do I have to utf8_decode() my MySQL column value to get it to display properly?