mySQL 表中的重音字符
我有一些法语文本(包含重音字符,如é"),存储在一个 MySQL 表中,其排序规则为 utf8_unicode_ci(表和列),我想在 HTML5 页面上输出.
I have some texts in French (containing accented characters such as "é"), stored in a MySQL table whose collation is utf8_unicode_ci (both the table and the columns), that I want to output on an HTML5 page.
HTML 页面字符集是 UTF-8(< meta charset="utf-8"/>),PHP 文件本身被编码为没有 BOM 的 UTF-8"(我在 Windows 上使用 Notepad++).我使用 PHP5 请求数据库并生成 HTML.
The HTML page charset is UTF-8 (< meta charset="utf-8" />) and the PHP files themselves are encoded as "UTF-8 without BOM" (I use Notepad++ on Windows). I use PHP5 to request the database and generate the HTML.
但是,在输出页面上,特殊字符(如é")出现乱码,被""代替.
However, on the output page, the special characters (such as "é") appear garbled and are replaced by "�".
当我浏览数据库(通过 phpMyAdmin)时,这些相同的重音字符显示得很好.
When I browse the database (via phpMyAdmin) those same accented characters display just fine.
我在这里遗漏了什么?
(注意:将页面编码(通过 Firefox 的Web 开发人员"菜单)更改为 ISO-8859-1 可以解决问题...除了直接出现在 PHP 文件中的特殊字符现在已损坏.但是无论如何,我宁愿了解为什么它不能作为 UTF-8 工作,也不愿在不了解其工作原理的情况下更改编码.^^;)
(Note: changing the page encoding (through Firefox's "web developer" menu) to ISO-8859-1 solves the problem... except for the special characters that appears directly in the PHP files, which become now corrupted. But anyway, I'd rather understand why it doesn't work as UTF-8 than changing the encoding without understanding why it works. ^^;)
推荐答案
我之前也遇到过同样的问题,我做了以下事情
I experienced that same problem before, and what I did are the following
1) 使用记事本++(几乎可以适应任何编码)或 eclipse 并确保在没有 BOM 的情况下以 UTF-8 保存或打开它.
1) Use notepad++(can almost adapt on any encoding) or eclipse and be sure in to save or open it in UTF-8 without BOM.
2) 在 PHP 标头中设置编码,使用 header('Content-type: text/html; charset=UTF-8');
2) set the encoding in PHP header, using header('Content-type: text/html; charset=UTF-8');
3) 删除 PHP 文件开头和结尾的所有多余空格.
3) remove any extra spaces on the start and end of my PHP files.
4) 通过 PhpMyAdmin 或您拥有的任何 mySQL 客户端将我所有的表和列编码设置为 utf8mb4_general_ci
或 utf8mb4_unicode_ci
.两种编码的比较可在这里
4) set all my table and columns encoding to utf8mb4_general_ci
or utf8mb4_unicode_ci
via PhpMyAdmin or any mySQL client you have. A comparison of the two encodings are available here
5) 将 mysql 连接字符集设置为 UTF-8(我使用 PDO 作为我的数据库连接)
5) set mysql connection charset to UTF-8 (I use PDO for my database connection )
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
或者在获取任何数据之前执行 SQL 查询
or just execute the SQL queries before fetching any data
6) 使用元标记 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7) 使用某种语言代码表示法语<meta http-equiv="Content-language" content="fr"/>
7) use a certain language code for French
<meta http-equiv="Content-language" content="fr" />
8) 将 html 元素的 lang 属性更改为所需的语言
8) change the html element lang attribute to the desired language
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
并将对此进行更多更新,因为我之前真的很难解决这个问题,因为我在过去的项目中处理日语字符
and will be updating this more because I really had a hard time solving this problem before because I was dealing with Japanese characters in my past projects
9) 某些字体在客户端 PC 中不可用,您需要使用 Google 字体 来包含它在你的 CSS 上
9) Some fonts are not available in the client PC, you need to use Google fonts to include it on your CSS
10) 不要以 ?>
注意:
但是如果我上面说的一切都不起作用,请尝试根据您真正想要显示的字符集调整您的编码,对我来说,我将所有内容都设置为 SHIFT-JIS
以显示所有我的日语字符,它真的很好用.但是使用 UFT-8
必须是您的优先事项
but if everything I said above doesn't work, try to adjust your encoding depending on the character-set you really want to display, for me I set everything to SHIFT-JIS
to display all my japanese characters and it really works fine. But using UFT-8
must be your priority
相关文章