PHP charset重音问题

时间:2011-04-17 20:54:45

标签: php mysql character-encoding diacritics

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

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

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

但是检索来自数据库重音的评论显示不正确(例如è=>Ã)。

我应该关注哪些参数来正确处理重音?

解决

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

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

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

现在重音显示正确

感谢

卢卡

2 个答案:

答案 0 :(得分:3)

对于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是您正在读取/写入数据的表格)

答案 1 :(得分:1)

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