php写入txt乱码的解决方法


Posted in PHP onSeptember 17, 2019

相信很多人在使用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乱码的详细内容,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
for循环连续求和、九九乘法表代码
Feb 20 PHP
推荐25款php中非常有用的类库
Sep 29 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
PHP邮件群发机实现代码
Feb 16 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 11 PHP
解决php写入数据库乱码的问题
Sep 17 #PHP
php写入文件不覆盖的实例讲解
Sep 17 #PHP
php提供实现反射的方法和实例代码
Sep 17 #PHP
php探针使用原理和技巧讲解
Sep 17 #PHP
php探针不显示内存解决方法
Sep 17 #PHP
Laravel 模型关联基础教程详解
Sep 17 #PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 #PHP
You might like
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
JS的replace方法介绍
2012/10/20 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
一个基于flask的web应用诞生(1)
2017/04/11 Python
python字典DICT类型合并详解
2017/08/17 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
django session完成状态保持的方法
2018/11/27 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Python算法中的时间复杂度问题
2019/11/19 Python
python集合删除多种方法详解
2020/02/10 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
介绍一下JNDI的基本概念
2013/07/26 面试题
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
电子工程求职信
2014/07/17 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
MySQL的存储过程和相关函数
2022/04/26 MySQL
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android