mySQL表中的重音字符

s42*_*427 12 php mysql unicode utf-8 non-ascii-characters

我有一些法语文本(包含重音字符,如"é"),存储在MySQL表中,其排序规则为utf8_unicode_ci(包括表和列),我想在HTML5页面上输出.

HTML页面字符集是UTF-8(<meta charset ="utf-8"/>),PHP文件本身编码为"没有BOM的UTF-8"(我在Windows上使用Notepad ++).我使用PHP5来请求数据库并生成HTML.

但是,在输出页面上,特殊字符(例如"é")显示为乱码并被" "替换.

当我浏览数据库(通过phpMyAdmin)时,那些相同的重音字符显示就好了.

我在这里错过了什么?

(注意:将页面编码(通过Firefox的"web开发人员"菜单)更改为ISO-8859-1解决了问题...除了直接出现在PHP文件中的特殊字符,现在已经损坏了.但无论如何,我我宁愿理解为什么它不能像UTF-8一样工作而不是改变编码而不理解它的工作原理.^^;)

Mp *_*ega 32

我之前遇到过同样的问题,我做的是以下内容

1)使用notepad ++(几乎可以适应任何编码)或eclipse,并确保在没有BOM的情况下以UTF-8保存或打开它.

2)使用在PHP头中设置编码 header('Content-type: text/html; charset=UTF-8');

3)删除PHP文件开头和结尾的任何额外空格.

4)将我的所有表和列编码设置为utf8mb4_general_ciutf8mb4_unicode_ci通过PhpMyAdmin或您拥有的任何mySQL客户端.这里有两种编码的比较

5)将mysql连接字符集设置为UTF-8(我使用PDO进行数据库连接)

  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8"
Run Code Online (Sandbox Code Playgroud)

或者只是在获取任何数据之前执行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">
Run Code Online (Sandbox Code Playgroud)

并且会更新这个因为我之前很难解决这个问题因为我在过去的项目中处理日文字符

9)客户端PC中没有某些字体,您需要使用Google字体将其包含在CSS中

10)不要用你的PHP源文件结束 ?>

注意:

但如果我上面说的所有内容都不起作用,请尝试根据您真正要显示的字符集调整编码,对我来说,我将所有内容设置SHIFT-JIS为显示所有日语字符,它确实很好用.但使用UFT-8必须是你的首要任务

  • 确实缺少"SET NAMES"并添加它足以纠正我的问题.由于我不使用PDO,我不得不使用以下语法:`mysql_query('SET NAMES utf8');`.非常感谢您的详细解答! (4认同)
  • 你也可以在你的 `new PDO(...)` 调用中添加 `;charset=UTF8`。像这样,`$dbo = new PDO('mysql:host='.$dbhost_name.';dbname='.$database.';charset=UTF8', $username, $password);` (2认同)

Vuc*_*cko 16

这适合我

  1. 建立你的数据库 utf8_general_ci
  2. 将文件保存为N ++ UTF-8 without BOM
  3. $mysqli->query('SET NAMES utf8');你的PHP文件连接到数据库后,
  4. 放入< meta charset="utf-8" />HTML-s

工作完美.

  • `$mysqli-&gt;query('SET NAMES utf8');` 对我有用!谢谢!:) (2认同)