1

您好,我的应用程序中有字符编码问题,想寻求帮助,因为即使我得到了一些指导,我也无法解决问题,所以这里是:我的 Ä 和 Ö 字符在浏览器中显示为: � </p>

我还将发布迄今为止我为解决问题所做的所有工作:

1) 数据库:我尝试更改表的排序规则,以下是 SHOW TABLE STATUS 为我的一张表提供的一些信息:

Name = test_groups
Engine = InnoDB
Version = 10
Row_format = Compact Collat​​ion
= utf8_swedish_ci

数据库字符变量给出:

| character_set_client = utf8
| character_set_connection = utf8
| character_set_database = latin1(我想知道这是原因吗?)
| character_set_filesystem = 二进制
| character_set_results = utf8
| character_set_server = utf8
| character_set_system = utf8

2)在 apache httpd.conf 我有:

AddDefaultCharset UTF-8

3)在我的 Zend 应用程序 application.ini 中:

resources.view.encoding = "UTF-8"

4) 在我的 Firefox 14.0.1 浏览器中

编辑->首选项->内容->高级->默认字符编码 = Unicode (UTF-8)

5)在我的 php 代码元标记中:

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

现在这里还有一些其他有趣的事情:当我查看我的页面并从 firefox 更改时

查看->字符编码->西方 (ISO-8859-1)

,来自 MySQL 数据库的�字符变成了 öä 字符,但是来自我的 php 代码的 öä 字符变成了 ät 字符。

当我检查来自我的 MySQL 数据库的数据的编码时,另一件事是

mb_detect_encoding($DATA_FROM_MYSQL_DATABASE)

它输出UTF-8!最后,如果我在代码中这样做:

utf8_encode($DATA_FROM_MYSQL_DATABASE)

并输出问题消失的结果,即 -characters -> öä-characters。那么这里发生了什么 x)感谢所有帮助

4

2 回答 2

2

您是否将SET NAMES utf8PHP 作为第一个查询发送到 MySQL ?如果不是,这可能是原因。

SET NAMES 指示客户端将使用什么字符集将 SQL 语句发送到服务器。因此,SET NAMES 'cp1251' 告诉服务器,“来自该客户端的未来传入消息在字符集 cp1251 中。” 它还指定服务器用于将结果发送回客户端的字符集。(例如,如果您使用 SELECT 语句,它指示用于列值的字符集。)

在 MySQL 中设置名称 utf8?有更多关于如何和为什么的细节。

于 2012-07-31T16:48:30.130 回答
1

疑难解答:

检查您的数据库(例如使用 PHPMyAdmin)。字符是否正确存储?还是看起来很乱?

如果数据库中的字符没问题,那么检索时就会出现问题。如果它们存储不正确(我猜是这样),那么问题出在“存储”上。

  1. 检查您的源代码文件并验证它们是否以 UTF-8 编码。
  2. 强制mysql连接使用UTF8 (mysqli::set_charset('utf8') or mysql_set_charset('utf8') or PDO: Add charset to the connection string (charset=utf8) )
于 2012-07-31T16:51:19.810 回答