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

标签 php mysql utf-8

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

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

以下是我正在做的事情的简要概述:

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

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

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

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

4) PHP 文件本身是 UTF-8 编码的。我已经为 html 设置了正确的字符集 <meta http-equiv="content-type" content="text/html; charset=utf-8" />

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

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

最佳答案

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

关于php - 来自 MySQL 数据库的字符的 UTF-8 问题(例如 é as É),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179763/

相关文章:

php - 将mysql数据分成3列错误

c++ - 未在 html head 中指定时,如何使用 cpp-netlib 读取 UTF-8 编码

Mysql排序顺序很奇怪

perl - 将十六进制转换为 UTF8 在 perl 中无法按预期工作

php - 如何防止用户在文本输入中输入联系信息(电子邮件/电话号码)?

mysql - 为什么有些表以主键 ASC 输出数据,而有些则不指定顺序?

php - PHP 变量是否应该在用作 OUT 函数参数之前进行初始化?

php - 获取按模糊范围排序的每日数值统计数据

php - 将数据库中的所有表显示到php中的选择表单中

php - 使用 php 下载图像链接