-->

为什么我要utf8_decode()我的MySQL列值让它正常显示?(Why do I have t

2019-10-29 05:20发布

我使用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()输出我的数据,它显示正确。

这个对吗? 我已经使用ヶ辆()到£符号转换成试图&pound; 但它输出&Acirc;&pound; 代替! 甚至当我使用额外的参数字符集。

也许有人能帮助 - 我必须在这里错过了什么,但我认为字符应该正确显示(像textarea的HTML标签的东西),如果所有的标题,meta标签等都是一致的UTF-8?

Answer 1:

您可以使用ヶ辆与第三个参数安全编码UTF-8:

htmlentities("£", ENT_COMPAT, "UTF-8")


Answer 2:

这听起来像在数据库中的数据是错误的:性格£实际存储为两个字符£。 您可以通过进入数据库,并使用十六进制和字符集功能证实了这一点:

select charset(MyColumn), hex(MyColumn) from MyTable;

如果列以UTF-8编码,值“£”你应该看到到该输出相同的:

+---------------+-----------+
| utf8          | C2A3      |
+---------------+-----------+

如果你看到任何东西,就像如果字符集列报告LATIN1或者十六进制列报告C382C2A3,在表中的数据是错误的。 它虽然可以修复,但修复取决于错误的类型的数据了。 什么?你怎么得charsethex



Answer 3:

如果一切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?