我有一些法语文本(包含重音字符,如“é”),存储在一个 MySQL 表中,其排序规则是 utf8_unicode_ci(表和列),我想在 HTML5 页面上输出。
HTML 页面字符集是 UTF-8 (< meta charset="utf-8"/>),PHP 文件本身被编码为“UTF-8 without BOM”(我在 Windows 上使用 Notepad++)。我使用 PHP5 请求数据库并生成 HTML。
但是在输出页面上,特殊字符(如“é”)出现乱码,被“�”代替。
当我浏览数据库(通过 phpMyAdmin)时,那些相同的重音字符显示得很好。
我在这里错过了什么?
(注意:将页面编码(通过 Firefox 的“web developer”菜单)更改为 ISO-8859-1 可以解决问题...除了直接出现在 PHP 文件中的特殊字符,这些字符现在已损坏。但是无论如何,我宁愿理解为什么它不能作为 UTF-8 工作,也不愿在不理解它为什么工作的情况下更改编码。^^;)
最佳答案
我之前遇到过同样的问题,我的做法如下
1) 使用notepad++(几乎可以适应任何编码)或eclipse,并确保以无BOM的UTF-8格式保存或打开。
2) 在 PHP header 中设置编码,使用 header('Content-type: text/html; charset=UTF-8');
3) 删除我的 PHP 文件开头和结尾的任何多余空格。
4) 将我所有的表和列编码设置为 utf8mb4_general_ci
或 utf8mb4_unicode_ci
通过 PhpMyAdmin 或您拥有的任何 mySQL 客户端。两种编码的比较可用here
5) 将 mysql 连接字符集设置为 UTF-8(我使用 PDO 进行数据库连接)
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
或者在获取任何数据之前执行 SQL 查询
6) 使用元标记 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7) 对法语使用某种语言代码
<meta http-equiv="Content-language" content="fr" />
8) 将html元素的lang属性更改为需要的语言
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
并且将对此进行更多更新,因为我之前真的很难解决这个问题,因为我在过去的项目中处理日文字符
9) 部分字体在客户端没有,需要使用Google fonts将其包含在您的 CSS 中
10) 不要以 ?>
结束您的 PHP 源文件
注意:
但如果我上面所说的一切都不起作用,请尝试根据您真正想要显示的字符集调整您的编码,对我来说,我将所有内容设置为 SHIFT-JIS
显示我所有的日文字符,它真的很好用。但是使用 UFT-8
必须是你的首要任务
关于php - mySQL 表中的重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14083847/