php - mySQL 表中的重音字符

标签 php mysql unicode utf-8 non-ascii-characters

我有一些法语文本(包含重音字符,如“é”),存储在一个 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_ciutf8mb4_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/

相关文章:

php - 如何使用数组中的值获取查询结果?

php - 干预 laravel 5

unicode - 为什么度数符号与 UTF-8 和 unicode 不同?

php - 如何自定义 wp_nav_menu() 堡垒图标

php - 为什么我们需要检查用户是否是 UserInterface 的实例

php - 使用多个 php 函数查询单个(mysql)数据库的正确方法

jquery - 选择select,如何将多个值放入$bind数组中

mysql - 创建 SQL 查询

python - 字符串化 Inline::Python::Object-encoded Unicode 字符串

unicode - TortoiseHg 提交提示消息中存在非 ASCII 字符