解决PHP file_put_contents函数输出文件为UTF-8乱码问题

在做TES项目时,有个奇怪问题,生成html文件是UTF-8编码。而生成的CSS文件却是GBK编码。
代码都是一样,输出的编码类型却不一样。
经过测试,得出以下结论:
1、输出纯英文字符串时,其编码默认是GBK的,因为没有中文字符存在,则无法判断是否是utf-8。
2、有中文存在,则文件输出UTF-8的。

故解决方法如下:

<?php 

$f="Post.txt";
$p=iconv("ASCII","UTF-8","I love you.");
if(is_writable($f)){file_put_contents($f,chr(0xEF).chr(0xBB).chr(0xBF).$p);
}?>

原理很简单,主要是这句代码“chr(0xEF).chr(0xBB).chr(0xBF)”,人工指定输出BOM头即可。
否则的话,需要有UTF8编码的字符,例如中文字符。英文则UTF8和ASCII是一样的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注