时间:2021-05-26
相信很多人在使用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写入txt乱码的详细内容,感谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP使用strrev翻转中文乱码问题的解决方法。分享给大家供大家参考,具体如下:在用PHP中的strrve翻转中文时,会出现乱码情况例如:hea
本文实例讲述了php查询mssql出现乱码的解决方法。分享给大家供大家参考。具体分析如下:在php连接mssql时查询出来的全部是乱码,这种问题我根据经验知道是
Java解决读写本地文件中文乱码的问题前言:在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码。原因其实很简单,就是系统的编码和
本文实例讲述了php使用fgetcsv读取csv文件出现乱码的解决方法。分享给大家供大家参考。具体分析如下:一般来说在php中碰到乱码多半是编码问题,在这里我们
对于乱码这个问题php开发者几乎都会有碰到过,我们下面主要是介绍了phpmysql数据库连接时乱码解决方法。MYSQL数据库使用UTF-8编码的问题1.用php