安装了apache2.4.39以后,默认编码是UTF-8,不管你文件是什么编码,统统按这个来解析,因此 GB2312编码文件内的中文将显示为乱码。
<!doctype html>
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=GB2312"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="renderer" content="webkit"><meta name="force-rendering" content="webkit"><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" /> <meta http-equiv="Content-Language" content="zh-cn"></head><body> <span>中文测试</span> <hr/>
<?phpheader('Content-type:text/html;charset=GB2312');// $input_filed = '<input type="text" name="username" value="'.$_POST['username'].'">';// echo $input_filed;$input_name = '<input type = "text" name = username value = "'.$_POST['username'].'">';echo '请输入姓名:' . $input_name;echo '<hr/>';echo "中文测试";// //Example #1 $_POST 范例// echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';
?></body>
</html>
解决方案:
打开apache配置文件 \Apachexxx\conf\httpd.conf ,查找AddDefaultCharset,查看设置的是啥,改为
AddDefaultCharset off
如果配置文件中没有AddDefaultCharset的话就加上一句
AddDefaultCharset off
改完了记得重启Apache
这样,Apache就能按照文件中设定的编码来正确解析文件了,前提是你的文件存储格式必须与设定编码一致。
如果不设置 AddDefaultCharset ,那么新安装完Apache后,默认都是用 UTF-8 编码来解析页面的。