【问题标题】:PHP charset accents issuePHP字符集重音问题
【发布时间】:2011-08-07 11:18:56
【问题描述】:

我的页面中有一个表单供用户发表评论。

我目前正在使用这个字符集:

meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" 

但从 DB 重音中检索评论显示不正确(Ex.è =>è)。

为了正确处理重音,我应该关心哪些参数?

已解决

  • 将元标记更改为 charset='utf-8'

  • 更改字符集 Mysql(ALTER TABLE cmets CONVERT TO CHARACTER SET utf-8)

  • 在插入记录和检索时更改了连接字符集 ($conn->query('SET NAMES utf8'))

现在重音显示正确

谢谢

卢卡

【问题讨论】:

标签: php mysql character-encoding diacritics


【解决方案1】:

当涉及到 LAMP Web 应用程序时,字符集可能很复杂,而且调试起来很痛苦。在一个软件与另一个软件对话的每个阶段,都存在不正确的字符集转换或不正确的数据存储。

您需要注意的地方是: - 在浏览器和 Web 服务器之间(您已经列出) - PHP 和 MySQL 服务器之间

您列出的字符看起来像正常的欧洲字符,将包含在 ISO-8859-1 字符集中。

检查事项:

  • 即使您在元标题中指定字符集,也请查看您的浏览器以确定浏览器实际使用的是哪个字符集。如果您指定了它,浏览器应该使用该字符集来呈现/查看页面,但如果我看到它试图自动检测正确的字符集并失败。大多数浏览器都会有一个“编码”菜单(可能在“视图”下),允许您选择字符集。确保上面写着 ISO-8859-1(西欧)。
  • 如果需要,MySQL 可以很高兴地支持字符集转换,但在大多数情况下,您希望将表和客户端连接设置为使用相同的编码。当以这种方式配置时,MySQL 不会尝试进行任何编码转换,只会将您输入的数据逐字节写入表中。读取时,它会以相同的方式逐字节输出。

您还没有说您是使用同一个网络应用程序还是使用其他客户端从数据库中读取数据。我建议您尝试使用相同的 Web 应用程序并使用相同的元字符集标头读取它(再次检查浏览器是否真的设置它)并查看浏览器中显示的内容。

要调试这些问题,您需要真正确定您正在使用的客户端/控制台是否也在进行任何转换,有时最安全的方法是将数据放入十六进制编辑器,您可以确保没有其他任何东西正在搞乱任何翻译。

如果看起来不是浏览器端的问题,请您将以下命令的输出包含在您的数据库中:

从您的网络应用建立的连接运行(而不是从其他一些 MySQL 客户端):

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

从任何 MySQL 客户端运行:

SHOW CREATE TABLE myTable;

(其中 myTable 是您正在从中读取/写入数据的表)

【讨论】:

    【解决方案2】:

    ISO-8859-1 字符集仅适用于拉丁字符。尝试 UTF-8,并确保这些字符来自的数据库也是 UTF-8 列。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2013-07-12
      • 2014-03-24
      • 1970-01-01
      相关资源
      最近更新 更多