发布PHP + MySQL网站时的Charset问题

时间:2011-06-17 19:05:12

标签: php mysql iis character-encoding

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

我的本地情景

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

expected behaviour locally

我的主机方案

  • PHP 5.3.6
  • 运行FastCGI的IIS
  • MYSQL 5.5.13
    • 连接:utf8_general_ci
    • 数据库:latin1_general_ci
    • table:latin1_general_ci
  • google chrome browser v.12.0.742.100 w / charset ISO-8859-1
  • php page charset设置为:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  • 主持人:注意“Notícia”如何显示自己的问题:

wrong behaviour on host

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

我考虑过

  • 问题是表中的实际数据(尽管它具有latin1_general_ci排序规则,但实际上数据的存储方式可能与this mate states it不同);
  • 与IIS有一些尴尬关系的问题(当在IIS下运行PHP时,经常会责怪IIS);
  • 我的编程技巧再一次在我身上耍花招
是谁提供了一些帮助?我可以提供一些巴西葡萄牙语课程,一些关于精神生活的建议或只是聊聊任何事情,但我必须解决这个问题并且可以帮助我。

提前感谢,

2 个答案:

答案 0 :(得分:1)

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

这就是您的问题所在。

问题是charset你被拯救了什么?这是受您的数据库设置的影响。与普通观点相反,您的数据库仅使用字符集进行整理。但它只是按原样保存位序列。

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

事情是:

  • 如果在代码开头正确放置&lt; meta http-equiv =“Co ...,您几乎总能让浏览器使用此字符集。
  • 但如果不是那么你的确有些未定义会发生什么。有些浏览器使用启发式来猜测字符集。

答案 1 :(得分:0)

我在我的本地fedora linux机器上从5.1升级到5.5并且我的charset出了问题。我发现只是通过安装软件才能完成升级。我必须在升级后遵循instructions from the MySQL manual来解决许多问题。该文档有许多步骤可以很好地解决问题。虽然你不应该直接跳到它 - 运行mysql_upgrade是一个很大的帮助。