

关于在VScode等编辑器右下角,PHP页面Head处及顶部,代码中用Set_charset设置utf8与Ansi或GBK的区别
注:在多数情况下Ansi等于GBK
1. VScode与notepad++页面右下角的utf8与Ansi
1)这里右下角的Utf8与GBK(N++为Ansi)是指文件保存的编码格式,Ansi比Utf8的文件小
2)VS与N++软件都会自动识别文件的编码并按其保存的编码打开,不会乱码
3)如果软件不能识别文件编码打开就会乱码,例如果你把utf-8保存的文件强制用Ansi查看就会乱码,同理Ansi文件强制Utf8查看也乱码
4)编码的转化
在N++中可在点编码--转为Ansi,把uft8转为Ansi格式,
在VScode中可点右下角的GBK,会在顶部弹出窗口--通过编码保存改为utf8
注:notepad++新建文件默认为utf8格式,而vscode默认新建文件,改后缀为txt与php文件编码格式都为GBK
2. PHP页面中的Head处的utf8与GBK与代码中用Set_charset设置utf8与GBK的区别
1). 设置示例
1)头部
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
2)PHP代码顶部
<?php header('Content-Type:text/html;charset=utf-8'); php>
...
2). 头部与顶部设置的utf8与GBK是告诉浏览器这个页面用什么编码显示
如果头部或顶设置的GBK,这个页面又是以GBK编码(查看右下角)保存的,那么这个页面的中英文就会显示正常,但如果这个页面是以utf8编码保存的,那么显示出的中文就会乱码
同理如果头或顶部设置让浏览器以utf8编码显示,那么这个页面也必须保存为utf8编码,中文才不会乱码
注:数据库是另外的,与PHP页面保存的编码无关,但查询的中文编码必须与浏览器显示的编码相同。比如一个PHP页面还有输出查询数据库的内容,浏览器以GBK显示,数据库查询的中文也必须是GBK编码的才不会乱码,浏览器以utf8显示,数据库查询的中文必须是utf8编码的
注2:360浏览器会自动识别页面的编码,如你在Head设置为GBK,但页面里中文是Utf8的,那么浏览器自动切换为utf8,但Google浏览器不会,它会以Head处的设置为准
3. 关于PHP页面中用Set_charset设置utf8与GBK的区别
1)这里设置主要告诉数据库将字符以什么编码的方式保存到数据库。如果不用Set_charset设置编码为Utf8,默认不知道用什么编码保存的,反正用PHPmyadmin打开表显示乱码
应用和PHP页面保存的编码有关,当页面存为GBK时上传到数据库为一种编码,当保存为utf8时又是另一种编码。用PHPmysadmin查看均显示乱码
2)PHPmyadmin打开表编辑输入中文时,默认又是以utf8编码保存的,
注:以mysql5.6.17为例,不知道为什么就算在mysql中把数据库和表编码设置为了utf8,PHP默认上传的中文也是GBK编码的,在PHP输出时要告诉浏览浏览器以GBK显示才不会乱码,也许新版的mysql不会有这个问题
示例:PHP代码中连接后用Set_charset设置编码
...
// 检查数据库连接
if ($conn->connect_error) {
die("数据库连接失败:" . $conn->connect_error);
}
if (!$conn->set_charset("utf8")) { // 设置字符编码为 UTF-8 //这里很重要,没有这句PHP上传到mysql中的是GBK编码,在PHPMYamdin中显示乱码
die("设置字符编码失败: " . $conn->error);
}
3. PHP使用二进制显示mysql数据库中字段
echo bin2hex($row["aa"]) ;
打开ctcms数据,双击打开表ct_coffee表,浏览下选项卡下所有字段都能正常显示,中国人123
双击任一字段值,复制 中国人123 到notepad++显示正常,切换到二进制显示 e4 b8 ad e5 9b bd e4 ba ba 31 32 33 //第汉字3字节,数字1字节,
到结构选项卡下,显示的排序规则也是utf8_general_ci