类别:PHP问题 / 日期:2019-11-27 / 浏览:251 / 评论:0
置信许多人在运用PHP的历程中都遇到过生成文件乱码的状况,不论是运用fwrite照样file_put_contents写入。能够你会先尝试从编码入手尝试处理,但终究的效果往往是不抱负的,只管我们都将其转换为了UTF-8编码了...
那末究其根本缘由是什么呢?就是缺乏头部BOM(固然,这里指的一定不是Js的Bom)。
BOM
既然提到了BOM,那末能够有的同砚不太相识这个家伙,这里我简单说一下,老鸟能够跳过。在Windows下用记事本之类的顺序将文本文件保留为UTF-8花样时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。
不仅限于 记事本保留的文件,只要在文件的启齿包含了“EF BB BF” 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当体系看到这玩意的时刻,就会以为你这个文件是UTF-8编码的。
这就是为何当文件没有BOM时,你给用户显现的文件就多是乱码的缘由了。
PS : 实在你能够将BOM明白成HTML中的charset属性和XML中的encoding属性,就是起一个标识作用。
处理办法:
那末如安在PHP中输出BOM呢?
答案是在所有内容输出之前输出:
print(chr(0xEF).chr(0xBB).chr(0xBF));
固然,假如你是在生成文件,多是下面两种:
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF));
以上内容仅供参考!
引荐教程:PHP视频教程
以上就是php写入txt乱码的细致内容,更多请关注ki4网别的相干文章!