【问题标题】:Charset problem upon publishing PHP + MySQL website发布 PHP + MySQL 网站时的字符集问题
【发布时间】:2011-06-17 19:05:11
【问题描述】:

我已将我的网站发布到服务器上,但由于性格问题,我正在扯掉我的头发。尽管我有任何愚蠢(不清楚或不匹配的字符集),但在本地它一切正常。我们只以一张表为例,因为它满足我们的条件:

我的本地场景

  • PHP 5.3.0
  • Apache 2.2.11
  • MySQL 5.1.36-community-log
    • 连接:utf8_general_ci
    • 数据库:latin1_general_ci
    • 表:latin1_general_ci
  • google chrome browser v. 12.0.742.100 w/charset ISO-8859-1
  • php 页面字符集设置为:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  • local:注意单词“Matéria” - 来自 html - 和“Notícia” - 来自数据库 - 两者都正确显示重音:

我的宿主场景

  • PHP 5.3.6
  • IIS 运行 FastCGI
  • MYSQL 5.5.13
    • 连接:utf8_general_ci
    • 数据库:latin1_general_ci
    • 表:latin1_general_ci
  • google chrome browser v. 12.0.742.100 w/charset ISO-8859-1
  • php页面字符集设置为:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  • 主持人:请注意“Notícia”如何出现问题:

我已经阅读了一些内容,包括这封 very good article 为开发人员建立共同点。

我考虑过

  • 问题在于表中的实际数据(尽管它具有 latin1_general_ci 排序规则,但数据实际上存储方式可能与 this mate states it 不同);
  • 与 IIS 有一定关系的问题(当一个人在 IIS 下运行 PHP 时,往往会责怪 IIS);
  • 我不正确的编程技巧又在欺骗我

有人提供帮助吗?我可以提供一些巴西葡萄牙语课程,一些关于精神生活的建议或只是聊聊任何事情,但我必须解决这个问题,也许可以帮助我。

提前致谢,

【问题讨论】:

  • 数据来自MySQL?您是如何转移数据库的?
  • 只有“A Gazeta”、“A tribuna”和“Notícia Agora”按钮来自 mySQL。对于传输,我已经导出了表结构和数据,复制了 SQL 语句并在主机数据库中执行它们,所有这些都使用 phpMyAdmin。
  • 我不建议您使用 UTF8 以外的任何东西进行排序/编码。将 utf8_general_ci 设置为您的数据库,并确保所有表/列具有相同的排序规则。在您的 html 头标签中使用 UTF8。您已经列出自己的连接、html 和 db 具有不同的编码。它似乎可以在您的机器上运行,但不能保证它会在其他任何地方飞行。
  • 我可以做到这一点,但为什么不了解它为什么在本地工作而不是在线工作呢?更改为 utf-8 不是我们最好的选择,因为它意味着更改大量代码和数据库本身,所以还有其他想法吗?但无论如何感谢您的建议,我肯定会阅读更多关于字符集的内容,以了解为什么我现在应该使用 UTF-8。
  • 我忘了添加 INSERTing(来自 php 页面)包含重音字符的项目会引发错误并且无法完成操作。

标签: php mysql iis character-encoding


【解决方案1】:

如果您使用 ISO 字符集,那么您必须确保您的文本使用与将要显示的相同的字符集存储。

这就是你的问题所在。

问题是你的 í 保存了什么字符集?这不受您的 DB 设置的影响。与普遍看法相反,您的数据库仅将字符集用于整理目的。但它只是按原样保存位序列。

将站点加载到浏览器中,然后强制浏览器使用 ISO-1 并查看它是否正确显示。如果是,则将其存储为 ISO-1,如果不是其他内容。

事情是:

  • 通过在代码开头正确放置

    【讨论】:

    • Raffael... 结果数据库数据存储为 UTF-8,所以我必须检查每个 .php 文件并将其编码更改为 UTF-8 并将文件重新保存为 UTF-8(使用 BOM,这在技术上对 UTF-8 没有区别,只是将其声明为 UTF-8)。我们宁愿更改 php 文件,也不愿更改数据库数据本身,那样会很痛苦(而且可能错误)。干杯。
    • 不管怎样,一路走 UTF8,你不会有任何问题......即使是 PHP5.2
【解决方案2】:

我将本地 Fedora linux 机器上的 mysql 从 5.1 升级到 5.5,但我的字符集有问题。我发现仅仅通过安装软件升级并没有完成。升级后我不得不关注instructions from the MySQL manual 来修复一些问题。该文档包含许多可以很好地解决该问题的步骤。虽然您不应该直接跳到它 - 运行 mysql_upgrade 有很大帮助。

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    相关资源
    最近更新 更多