PHP和MySQL中的字符编码

时间:2009-11-09 16:15:32

标签: php mysql character-encoding

我们的网站是使用设置为...的元标记开发的。

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

这适用于M-dashes和特殊引号等。但是,当数据输入到在MySQL中存储数据的CMS组件时,我遇到了问题。 MySQL排序规则设置为UTF8_swedish_ci(我读到这是好的,并且在phpMySqlAdmin中设置时必须是默认值。)

我现在遇到的问题是当我将数据从DB输出到页面时,字符是 utf8编码,所以我通过uft8_decode()php函数运行它们。我认为这会解决不兼容问题,但我得到的并不是我所期望的。

当我在文本字段中查看数据库中的数据时(再次通过phpMySqlAdmin),它看起来像这样......

这 - 那

当我在屏幕上查看它时,它看起来像......

这个?这

我知道我可以尝试在数据库或文本中查找/替换其中的一堆,但我希望以编程方式执行此操作更简单。

谢谢, 唐


更新

仍有一个问题,htmlentities()很遗憾无法修复。

我在这样的文件中有文字:我们(特别')。我的MySQL排序规则是“latin1_swedish_ci”(默认值)。如果我将标题或元数改为iso / utf,则一个或另一个中断。 W / utf-8(')黑色钻石但数据库内容很好。使用iso,内联内容是可以的,但db中的内容有各种各样的和其他字符。尝试将MySQL排序规则更改为utf-8,但没有看到差异。

我决定手动更改项目。感谢您的任何其他建议。

3 个答案:

答案 0 :(得分:1)

如果数据库中的数据是UTF8,则在连接到MySQL后需要运行此查询:

SET NAMES UTF8

答案 1 :(得分:1)

假设您能够在数据库中正确设置编码,我建议的方法是:

  • 确保已正确设置Content-Type标头 服务器。这可以通过使用头函数在php中完成。

    标题('Content-Type:text / html; charset = iso-8859-1');

请注意,这是优先的,并且是最简单的信息,因为用户代理不必解析它。

  • 在HTML文件中设置元标记。

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

如需进一步阅读,请参阅:

http://www.joelonsoftware.com/articles/Unicode.html

http://www.webstandards.org/learn/articles/askw3c/dec2002/

答案 2 :(得分:0)

我的猜测是,尽管你使用了meta标签,但Web服务器会发送一个标头,将字符集设置为UTF-8。但是,解决这些问题的最简单方法通常是将非ASCII字符转义为HTML实体。