0

问题:

当我从 MySQL 表中检索值到我的 PHP Zend 框架应用程序时,字符 ä 和 ö 会从数据库返回到我的浏览器,如下所示。

任何可能出现问题的想法?我已经尝试将一些属性设置为 UTF-8,但仍然会发生这种情况......我想我仍然错过了一些东西。

您能否提供一些解决方案,我如何才能确定地摆脱这种情况?我需要设置什么配置等。

谢谢 :)

4

4 回答 4

1

当浏览器读取错误编码的字符时,它们会显示为 � 或 ?。某处存在编码不匹配:

  • 在您的浏览器中
  • 在数据库表排序规则
  • 在 HTML 字符集中

这些字符可以在 Unicode UTF-8 中使用,因此您应该验证您的数据库表排序规则是utf8_bin或类似的,因为如果您想以 UTF-8 瑞典语存储所有内容,您可以使用utf8_swedish_ci

在您的浏览器中,确保您的内容编码设置为自动检测。

在 MySQL 中创建一个 UTF-8 / utf8_bin 表,这里是一个例子:

CREATE TABLE `sample` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

要更改现有表以使用 UTF-8,请使用以下命令:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

这篇文章很好地解释了是否使用CONVERT TO CHRACTER SET utf8

注意CHARSETCOLLATE都必须设置,否则会自动获取COLLATE=utf8_general_ci

对于 HTML,可以使用以下方式设置字符集:

<meta charset="UTF-8">
于 2012-07-31T14:59:27.610 回答
1

我建议您查看浏览器中设置的“网站编码”。

如果网站不提供编码并且您的 mysql/php 正在“正确”处理它,这可能会发生(例如,它设置为“western 1252”但需要 utf8/unicode)

在 Firefox 中,您可以通过视图 -> 编码(或类似方法)查看编码

于 2012-07-31T15:00:45.860 回答
1

您只需将编码正确设置为 UTF-8。以下是最小工作解决方案的基本步骤:

  1. 确保您的数据库连接使用 UTF-8
  2. 确保您的 HTTP 内容类型设置为 UTF-8(例如:(另外,您可以为文档header('Content-type: text/html; charset=utf-8');指定编码)
  3. 将文件另存为 UTF-8。在 Windows 中,文件保存为 CP-1251,这意味着特殊重音字符不会被视为 UTF-8 编码字节(因此会丢弃输出到浏览器的内容。保存文件时必须明确设置编码。在 Linux/Mac 中,这不是问题,因为默认使用 UTF-8。
  4. 确保您php.ini没有覆盖编码。如果您有外部.htaccess文件,请检查它们是否也没有。

如果您正确处理 UTF-8,则不需要utf8_encode/utf8_decodehtmlentities,并且无需特殊处理即可正确输出重音字符。

注意:某些语言环境不是由 UTF-8 处理的,尤其是Thaï

于 2012-07-31T15:00:52.027 回答
1

关于Zend_Db_Adapter_Pdo_Mysql确保您的构造函数使用UTF-8,如下所示:

$your_pdo = Zend_Db::factory('Pdo_Mysql', array(
                'host'     => DATABASE_HOST,
                'username' => DATABASE_USERNAME,
                'password' => DATABASE_PASSWORD,
                'dbname'   => DATABASE_DBNAME,
                'options'  => array( 'charset' => 'utf8' )
        ) );    

HTML中使用数据转义之前:

return htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' );

查看有关内容类型、文件编码等的所有其他答案。

于 2012-07-31T15:06:44.210 回答