来自MySQL数据库的字符的UTF-8问题(例如éasé)

时间:2012-02-07 16:18:00

标签: php mysql utf-8

我知道有关于UTF-8问题的数百个问题,但我尝试了所有我能找到的方法,但没有一个帮助过。

事实: 我正在尝试从MySQL数据库中读取包含é的字符串,并将其显示在PHP页面上。实际上,它显示为é(但字体不能识别它,因此使用另一种默认字体)。当我想使用PHP函数将字符串转换为文件名以进行字符串替换时,出现了麻烦。 PHP根本不承认这是é字符。

以下是我正在做的事情的快速概述:

1)String存储在MySQL数据库中。 MySQL服务器设置是: MySQL连接排序规则utf8_unicode_ci
MySQL charset:UTF-8 Unicode(utf8)
数据库本身设置为collat​​ion utf8_unicode_ci(MyISAM存储引擎,由于共享服务器而无法更改)
实际表设置为collcation utf8_unicode_ci(InnoDB存储引擎)

é在phpMyAdmin中正确显示。数据通过Java程序插入到数据库中,但我也尝试使用手动输入的数据(在phpMyAdmin中输入)。

2)PHP default_charset未设置(NO VALUE),我在共享服务器上并且放置手动覆盖php.ini似乎不起作用。使用ini_set("default_charset", 'utf-8');有效,但对我遇到的问题没有影响。

3)在运行实际的选择查询之前,我查询SET NAMES 'utf8'。查询本身无关紧要,但对于测试,我选择了一个简单的SELECT title FROM items WHERE item_id = 1

4)PHP文件本身编码为UTF-8。我已使用<meta http-equiv="content-type" content="text/html; charset=utf-8" />

为html设置了正确的字符集

5)为了测试问题我在返回的字符串(Astérix)上使用了htmlentities,检查源代码它转换为Ast&Atilde;&copy;rix当然不正确。因此,字符串在浏览器中显示为Astérix

可能的原因是什么?对我来说,似乎我设置了所有可以设置为UTF-8的东西。

1 个答案:

答案 0 :(得分:3)

http://php.net/manual/en/ref.mbstring.php - 查看多字节字符串函数。