PHP和MySQL中的字符编码

PHP和MySQL中的字符编码,php,mysql,character-encoding,Php,Mysql,Character Encoding,我们的网站是用一个元标签开发的,设置为 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 这适用于M-破折号和特殊引号等。但是,当数据被输入到在MySQL中存储数据的CMS组件中时,我遇到了一个问题。MySQL排序规则设置为UTF8_swedish_ci(我读到这是可以的,在phpMySqlAdmin中设置时一定是默认设置) 我现在遇到的问题是,当我将信息从数据库输出到页面时,字

我们的网站是用一个元标签开发的,设置为

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

这适用于M-破折号和特殊引号等。但是,当数据被输入到在MySQL中存储数据的CMS组件中时,我遇到了一个问题。MySQL排序规则设置为UTF8_swedish_ci(我读到这是可以的,在phpMySqlAdmin中设置时一定是默认设置)

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

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

这个-那个

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

这个?那

我知道我可以尝试在DB或文本中查找/替换其中的一组,但我希望有一种更简单的编程方法

谢谢, 堂


更新:

仍然存在一个htmlentities()无法修复的问题

我在一个文件中有这样的文本:我们有(特殊的)。我的MySQL排序规则是“latin1_swedish_ci”(默认值)。如果我将头或元更改为iso/utf或其他中断。W/utf-8(')为黑钻石,但db含量良好。对于iso,内联内容是可以的,但是来自db的内容具有各种字符和其他字符。尝试将MySQL排序规则更改为utf-8,但没有发现任何差异


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

我的猜测是,尽管有元标记,web服务器还是会发送一个将字符集设置为UTF-8的头。但是,解决这类问题的最简单方法通常是将非ASCII字符转义到HTML实体。

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

SET NAMES UTF8

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

  • 确保内容类型标题已由 服务器。这可以通过使用header函数在php中完成

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

请注意,这具有优先权,并且是最容易获取的信息,因为用户代理不必解析它

  • 在HTML文件中设置meta标记

有关更多读数,请参阅: