0

我正在使用将 App.encoding 设置为 UTF-8 的 CakePHP,<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()输出我的数据,它会正确显示。

这个对吗?我曾尝试使用 htmlentities() 将 £ 符号转换为&pound;,但它会输出&Acirc;&pound;!即使我使用字符集的附加参数。

也许有人可以提供帮助 - 我一定在这里遗漏了一些东西,但我认为如果你所有的标题、元标记等都是 UTF-8,那么字符应该正确显示(在 textarea HTML 标签之类的东西中)?

4

3 回答 3

1

听起来您的数据库中的数据是错误的:字符 £ 实际上存储为两个字符 £。您可以通过访问数据库并使用 hex 和 charset 函数来确认这一点:

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

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

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

如果您看到任何其他内容,例如 charset 列报告 latin1 或 hex 列报告 C382C2A3,则表中的数据是错误的。虽然可以修复,但修复取决于数据的错误类型。你从charset和得到什么hex

于 2012-10-10T16:01:05.657 回答
0

您可以使用带有第三个参数的 htmlentities 来安全地编码 UTF-8 :

htmlentities("£", ENT_COMPAT, "UTF-8")
于 2012-10-10T14:42:26.803 回答
0

如果一切都在 UTF8 中,请删除"encoding"=>"UTF8"您的 database.php 连接详细信息:

$conn = mysql_connect($server, $username, $password);
//mysql_set_charset("UTF8", $conn); // REMOVED. ;)
mysql_select_db($database, $conn);
于 2014-01-18T23:57:26.430 回答