我有一些法语文本(包含带重音符号,例如“é”),存储在一个排序规则为utf8_unicode_ci(表和列)的MySQL表中,我希望在HTML5页面上输出该文本。
HTML页面字符集为UTF-8(),PHP文件本身被编码为“ UTF-8 without BOM”(我在Windows上使用Notepad ++)。我使用PHP5请求数据库并生成HTML。
但是,在输出页面上,特殊字符(例如“é”)显示为乱码,并替换为“。”。
当我浏览数据库(通过phpMyAdmin)时,那些相同的带重音符的字符显示得很好。
我在这里想念什么?
(注意:将页面编码(通过Firefox的“ Web开发人员”菜单)更改为ISO-8859-1可以解决此问题…除了直接出现在PHP文件中的特殊字符(现在已损坏)之外,无论如何,我还是宁愿了解为什么它不能作为UTF-8使用,而不是在不了解其工作原理的情况下更改编码。^^;)
我以前遇到过同样的问题,下面是我做的
1)使用notepad ++(几乎可以适应任何编码)或Eclipse,并确保将其 保存或在没有BOM的UTF-8中打开 。
2)在PHP标头中设置编码,使用 header('Content-type: text/html; charset=UTF-8');
header('Content-type: text/html; charset=UTF-8');
3)删除PHP文件开头和结尾的所有多余空格。
4)所有的设置我的表和列编码到utf8mb4_general_ci或utf8mb4_unicode_ci通过phpMyAdmin界面,或者您有任何MySQL客户端。此处提供两种编码的比较
utf8mb4_general_ci
utf8mb4_unicode_ci
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"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7)对法语使用某种语言代码 <meta http-equiv="Content-language" content="fr" />
<meta http-equiv="Content-language" content="fr" />
8)将html元素lang属性更改为所需的语言
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
并会进行更多更新,因为在我之前的项目中处理日语字符之前,我确实很难解决此问题
9)某些字体在客户端PC中不可用,您需要使用Google字体将其包含在CSS中
10)不要以 ?>
?>
注意:
但是,如果我上面提到的所有内容都不起作用,请尝试根据您真正想要显示的字符集来调整编码,对我来说,我将所有内容都设置SHIFT- JIS为显示所有日语字符,并且确实可以正常工作。但是使用UFT-8必须是您的首要任务
SHIFT- JIS
UFT-8