【问题标题】:MySQL Character encoding (öä) in PHP applicationPHP 应用程序中的 MySQL 字符编码 (öä)
【发布时间】:2012-07-31 16:40:20
【问题描述】:

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

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

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

名称 = test_groups
Engine = InnoDB
版本 = 10
Row_format = Compact
排序规则 = utf8_swedish_ci

数据库字符变量给出:

| character_set_client = utf8
| character_set_connection = utf8
| character_set_database = latin1 (我 不知道是不是这个原因?)
|字符集文件系统 = 二进制
| 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)感谢所有帮助

【问题讨论】:

  • 1) 在您的 html 文件中尝试 2) 您在该元标记之前有多少个字符?一些浏览器希望在文档的前几千字节内包含字符编码信息。对 IE 类或 fbml 标记使用条件 cmets 可能会将您的字符编码信息推到后面。
  • 嗨 Jan Beck,这是我的应用程序一开始的代码:
  • ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" rel="nofollow" target="_blank">w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> w3.org/1999/xhtml">
  • 应该没问题。建议在服务器端进行调查。

标签: php mysql zend-framework utf-8 character-encoding


【解决方案1】:

您是否在 PHP 中发送 SET NAMES utf8 作为对 MySQL 的第一个查询?如果不是,那可能是原因。

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

SET NAMES utf8 in MySQL? 有更多关于如何和为什么的细节。

【讨论】:

  • 嘿,不,我现在根本没有使用 SET NAMES。只需使用 Zend 提供的工具连接并获取行并关闭连接
【解决方案2】:

疑难解答:

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

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

  1. 检查您的源代码文件并验证它们是否以 UTF-8 编码。
  2. 强制 mysql 连接使用 UTF8(mysqli::set_charset('utf8') 或 mysql_set_charset('utf8') 或 PDO:将字符集添加到连接字符串 (charset=utf8))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2012-08-07
    相关资源
    最近更新 更多