类别: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网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章