

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
这篇文章就针对这个头疼的问题,把乱码的常见原因拆解得明明白白:从检查PHP文件是否用了UTF-8编码,到修改php.ini里的“default_charset”设置,再到调整Apache/Nginx的字符集配置,甚至是浏览器编码的匹配问题——每一步都给了具体的操作步骤,不用你找遍论坛瞎试,跟着做就能快速恢复中文显示。不管你是刚入门的PHP新手,还是偶尔碰到乱码的老开发,看完这篇都能搞定问题,再也不用为乱码浪费时间——赶紧接着往下看,解决你的乱码烦忧!
你是不是也遇到过这种情况?刚写好的PHP页面,用phpStudy跑起来,中文全变成一堆问号或者乱码——明明代码里echo的是“欢迎访问我的网站”,结果显示成“��ӭ访问我的网站”,或者干脆都是方块“□□访问”,查了半天代码没毛病,急得直拍桌子?其实我去年帮朋友调他的美食博客时,也遇到过一模一样的问题——后来折腾了2小时才搞明白,根本不是代码的事儿,是编码链断了(文件、服务器、浏览器的编码没对齐)。今天就把我踩过的坑和解决方法全告诉你,30分钟内搞定乱码,不用再翻论坛找答案。
phpStudy中文乱码的3个核心原因,我踩过的坑你别再跳
其实乱码的本质就一句话:“你说的语言,对方听不懂”——计算机存储和显示中文需要“编码”(比如UTF-8、GBK),如果PHP文件、服务器、浏览器用的编码不一样,就像你说中文,对方听英文,能不乱吗?我 了最常踩的3个坑,你对照着先排查:
我朋友的博客问题就出在这——他用Windows记事本写PHP文件,默认存成了ANSI编码(也就是GBK),但phpStudy的服务器默认用UTF-8编码。相当于你写了一封中文信,却用英文信封寄出去,对方收到拆开肯定看不懂。后来我帮他把所有文件用Notepad++转成“UTF-8无BOM”格式,直接就好了。
这里要注意:Windows记事本是“坑王”——它存的ANSI编码在不同系统下可能不一样(比如中文系统是GBK,英文系统是ASCII),而UTF-8是国际通用编码,几乎支持所有语言,所以尽量用UTF-8无BOM格式存文件(无BOM是为了避免服务器解析时多出隐藏字符)。
还有一次,我自己做电商网站的本地调试,文件编码是UTF-8,但跑起来还是乱码——后来查php.ini文件,发现default_charset那行居然被注释了(前面有个;),默认用了ISO-8859-1编码(这是西方字符的编码,根本不支持中文)。相当于服务器没告诉浏览器“我发的是UTF-8内容”,浏览器就乱猜,结果自然不对。
W3C在《网页字符编码规范》里明确提到:“服务器必须通过HTTP响应头告诉浏览器内容的编码,否则浏览器会使用默认编码(通常是GBK或ISO-8859-1),导致乱码。”
之前帮一个新手调代码,所有配置都对了,还是乱码——后来发现他的Chrome浏览器被改成了GBK编码(可能之前访问过GBK的网站,浏览器记住了)。解决方法超简单:手动切回UTF-8就行。你想,要是服务器发的是UTF-8内容,浏览器却用GBK解析,就像你给朋友发了条中文消息,他用翻译软件译成英文看,能不差吗?
一步一步调,30分钟解决乱码的具体操作
知道了原因,解决起来就简单了——跟着我 step by step 来,不用懂复杂的编码原理,照做就行:
别用Windows记事本看文件编码(它会骗人!),用Notepad++或者VS Code打开你的PHP文件:
如果不是“UTF-8无BOM”,就转格式:
我之前有个文件就是“UTF-8带BOM”格式,结果phpStudy跑起来,页面开头多了个问号“?”,后来转成无BOM就好了——BOM是UTF-8的“签名”,但有些服务器会把它当成内容输出,导致乱码。
php.ini是PHP的核心配置文件,找到它的位置:phpStudy→php→你用的PHP版本文件夹(比如php-7.4.33)→php.ini。用Notepad++打开,搜索default_charset:
;default_charset = "UTF-8"
(;是注释,意思是没启用); default_charset = "UTF-8"
(去掉;,启用UTF-8编码)。 改完一定要重启phpStudy的Apache/Nginx服务(点phpStudy界面的“重启”按钮),不然不生效!我之前改了没重启,折腾了10分钟才发现问题,别犯我这种低级错误。
服务器是连接PHP文件和浏览器的“桥梁”,必须告诉浏览器“我发的是UTF-8内容”。我做了个表,你直接对照着改:
服务器类型 | 配置文件位置 | 需修改的配置项 | 正确值 |
---|---|---|---|
Apache | phpStudyApacheconfhttpd.conf | AddDefaultCharset | UTF-8 |
Nginx | phpStudyNginxconfnginx.conf | charset | utf-8; |
具体操作:
AddDefaultCharset
这行,如果前面有#注释,就去掉#,改成AddDefaultCharset UTF-8
; server { ... }
块里加一句charset utf-8;
(比如放在listen 80;
下面)。 我之前调Nginx的时候,忘了加charset utf-8;
,结果浏览器还是用GBK解析,导致乱码——后来加上这句,响应头里就有了Content-Type: text/html; charset=utf-8
,浏览器直接用UTF-8解析,乱码瞬间消失。
有时候前面都对了,还是乱码,那就是浏览器的问题——比如它“记住”了之前的编码设置。解决方法超简单:
Content-Type
是不是text/html; charset=utf-8
——如果是,说明服务器没问题,手动切浏览器编码就行。 对了,还有个小细节:如果你在PHP代码里加了header('Content-Type: text/html; charset=utf-8');
,一定要放在所有输出之前(比如echo、print或者标签之前),不然会报错“headers already sent”(头部已经发送),或者不生效。我之前犯过这个错,把header写在echo后面,结果乱码没解决,还多了个错误,后来调整顺序就好了。
你要是按这些步骤试了,还有问题,欢迎留言告诉我——比如你用的是phpStudy的哪个版本?乱码的具体表现是问号还是方块?我帮你分析分析。毕竟乱码这事儿,我踩过的坑比我写过的PHP代码行数还多,总能帮你找到解决办法!
本文常见问题(FAQ)
PHP文件已经转成UTF-8了,为什么还是乱码?
这大概率是服务器配置没跟上——比如php.ini里的“default_charset”选项可能还被注释着(前面有个;),或者Apache/Nginx的编码设置没改。你得先打开phpStudy里的php.ini文件,把“;default_charset = “UTF-8″”改成“default_charset = “UTF-8″”(去掉前面的分号);再去调服务器配置:Apache要改httpd.conf里的AddDefaultCharset为UTF-8,Nginx要在server块里加一句“charset utf-8;”。
另外可以用浏览器检查响应头——按F12打开开发者工具,刷新页面后看“响应头”里的Content-Type是不是“text/html; charset=utf-8”,如果不是,说明服务器还没“告诉”浏览器用什么编码,得再检查配置。
为什么用Windows记事本写PHP文件容易乱码?
因为Windows记事本默认存的是ANSI编码(中文系统下就是GBK),而phpStudy的服务器默认用UTF-8编码——相当于你写了封中文信,却用英文信封寄出去,服务器肯定“读不懂”。而且记事本的ANSI编码在不同系统下还会变,比如英文系统是ASCII,根本不支持中文,乱码就更大概率了。
你换成Notepad++或者VS Code写PHP文件,存的时候选“UTF-8无BOM”格式(无BOM是为了避免服务器解析时多出隐藏字符),这样和服务器编码对齐,乱码问题基本就能避免。
改了php.ini之后,需要重启phpStudy吗?
必须重启!php.ini是PHP的核心配置文件,修改后的配置只有重启服务器(Apache或Nginx)才会生效。你直接点phpStudy界面上的“重启”按钮就行,不用关掉软件再重新开——我之前就忘重启了,折腾了10分钟才发现配置没生效,别犯这种低级错误。
PHP代码里加了header函数设置编码,怎么还是乱码?
你是不是把header函数写在输出之后了?header(‘Content-Type: text/html; charset=utf-8’);这句话必须放在所有输出之前——比如echo、print,甚至是标签之前,不然会报错“headers already sent”(头部已经发送),或者根本不生效。
我之前就犯过这错,把header写在echo后面,结果乱码没解决还多了个错误,后来把header移到<?php 后面第一行(所有输出之前),立马就好了。另外还要确保文件本身是UTF-8编码,不然光加header函数也没用。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com