我知道有关于UTF-8问题的数百个问题,但我尝试了所有我能找到的方法,但没有一个帮助过。
事实: 我正在尝试从MySQL数据库中读取包含é的字符串,并将其显示在PHP页面上。实际上,它显示为é(但字体不能识别它,因此使用另一种默认字体)。当我想使用PHP函数将字符串转换为文件名以进行字符串替换时,出现了麻烦。 PHP根本不承认这是é字符。
以下是我正在做的事情的快速概述:
1)String存储在MySQL数据库中。 MySQL服务器设置是:
MySQL连接排序规则utf8_unicode_ci
MySQL charset:UTF-8 Unicode(utf8)
数据库本身设置为collation 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" />
5)为了测试问题我在返回的字符串(Astérix)上使用了htmlentities,检查源代码它转换为Astérix
当然不正确。因此,字符串在浏览器中显示为Astérix
。
可能的原因是什么?对我来说,似乎我设置了所有可以设置为UTF-8的东西。