关于PHP编码的选用

说起文件编码,打从业就没怎么关注过,乱码吗?用记事本打开二进制文件就见过,不打开不就见不到了吗;word,excel印象中就没遇到有;汉化软件乱码,本人认几百个英语单词还行,至于汉化得糟糟的工具呀,游戏啊,冲着安全和视觉期求,是避之不用的,做的一些小工具选择C#,autoit,python还没被卡在编码上。
说说php上的乱码,就是调试的报错信息也看不懂,是不得不解决了才继续主功能编写的,就此写写备忘一下。
php的编码,分文件的编码和解析的编码,正确显示中文的前提两者的编码要一致,例如文件另存时选择utf-8,php代码内就得标明

header("Content-Type:text/html;charset=utf-8");

或文件另存时选择gbk,就得标明

header("Content-Type:text/html;charset=gbk");

以此类推,如果是记事本另存,非utf-8的编码需选择ANSI保存,而vscode在右下角点击编码格式可精确更改。

html的head内的meta视解析器而论,如用php解析,就加不加都不影响php内的编码输出,因header已指定了输出编码。

进一步阐述,如php使用gbk或18030或gb2312的编码,连接的是默认输出gb2312的中文版ms sql server数据库,可以正常显示中文字符,但要是php是utf-8的编码,就需要进行转换,
比如,输入的字符需从utf-8转成gb2312:

iconv("utf-8","gb2312",$sql);

输出到页面的查询结果又得从gb2312转成utf-8:

iconv("gb2312","utf-8",$got)

这个在有javascript回调显示时也是成立的。

补充:
1.文件转换编码是可能造成格式损失的,会发现中文出现乱码后,不管选择哪个编码进行保存,依旧是乱码,操作前记得备份原文件。
2.网上脑补了一下这些编码之间的关系,是gb18030>gbk>gb2312,表示中文需要2个字节,utf-8表示中文需要三个字节,原文中说uft-8,utf-16等仅是字符集,为什么选择这个字符集系统就能识别出编码呢,是内部引用或转换gb系编码吗,备疑。

附链接:https://zhuanlan.zhihu.com/p/453675608

半知半觉地到了老而不肖的年纪,过往点滴,是有那么十数件要么心亏,要么愤慨,要么算了,要么绮望...诸等反复嚼陈的,选专业就是其一,写码刮不出水链会叹基础差,好多概念糊涂不清。本人不是那凭本废练习册就专占一自习位一类,可大学的铺教对我这类水平的学生就像往水里按,还又想想要是有报计算机系挨过,是否捉窘就能少一些呢。

posted @ 2024-04-13 17:14  qiuwenzheng  阅读(19)  评论(0)    收藏  举报