linux下apache2和php乱码问题
- 提问者网友:枫涩帘淞幕雨
- 2021-05-11 20:00
- 二级知识专家网友:厭世為王
- 2021-05-11 20:26
# # 完全原创 # #
windows上倒是遇见过很多中乱码,但有些部分应该是差不多的。有参考其他资料,但没有直接复制大段文字,是自己一点点总结出来的。希望能够帮到你。
影响因素较多,一一列出
1. apache的httpd.conf中有默认编码的设置 ,例如 AddDefaultCharset utf-8,这个会有一定影响
2. php的php.ini中也有默认编码的设置,例如default_charset = "utf-8",只能有一个默认编码
3. 数据库字段使用的编码:如果是Latin很容易乱码的
4. php源代码文件的编码:源代码在开发过程中,文本存为文件本身也是有编码方式的。
5. php代码中使用header控制编码(可以省略)
<?php
header(“Content-Type: text/html; charset=utf-8");
?>
6. 网页前台的编码
html代码中的meta <meta http-equiv="content-type" content="text/html;charset=utf-8">
实际应用中,改变服务器设置不现实,尤其是租服务器,主机提供商不会帮你改的
因此,从3456入手,而且各个部分应该一直、匹配。
也就是说,数据库用了utf-8,那么源码也存成utf-8,网页前台也content="text/html;charset=utf-8"
附加说明:
第4点:
一般IDE(例如ZendStudio)是可以指定代码编码的,但是有一些例外:
使用Win7的记事本修改后,存为utf-8,会加入windows特有的utf-8标记“BOM”,这是微软为了标记编码在文件头加的额外信息,这样的源代码被执行后,BOM会发往客户端!客户端收到的网页开头是乱的,因为BOM打乱了内容编码的解析
在Mac上使用编辑工具修改源代码后,代码的存储编码会发生较大变化,本人在于团队合作过程中也因此出现较多问题,不推荐使用系统(win/mac)自带的一些文本编辑工具(即使他们有代码高亮或代码提示)
使用成熟的IDE是很不错的办法
第5点:
用header控制编码要注意和其他设置头(header)的操作的前后关系,容易导致 “无法修改已发送的头”的错误
用这个其实有时候实属无奈,但很有效
第6点:
请把<meta http-equiv="content-type" content="text/html;charset=utf-8"> 放到<title></title>之前!!
因为如果title包含中文,很可能悲剧。本人遇到过两次整站直接空白无法显示出来的问题,就是因为次序问题。