PHP读取文件,解决中文乱码UTF-8的方法分析


Posted in PHP onJanuary 22, 2020

本文实例讲述了PHP读取文件,解决中文乱码UTF-8的方法。分享给大家供大家参考,具体如下:

$opts = array(
  'file' => array(
    'encoding' => "utf-8"
  )
);
$opts = array('http' => array('encoding' => 'utf-8'));
$ctxt = stream_context_create($opts);
$content = file_get_contents($filePath, FILE_TEXT, $ctxt);

最简单的就是将GF2312→UTF-8

$str = iconv("gb2312", "utf-8", $str);

不管用的

$content = mb_convert_encoding($content, "UTF-8", "auto");

******************************************丑陋的分割线来告诉大家上面的不好的:下面的才是正确的方法···哈哈···**********************************************************

define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));

$text = file_get_contents($newPath);
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
$encodType = "";
if ($first3 == UTF8_BOM)
  $encodType = 'UTF-8 BOM';
else if ($first4 == UTF32_BIG_ENDIAN_BOM)
  $encodType = 'UTF-32BE';
else if ($first4 == UTF32_LITTLE_ENDIAN_BOM)
  $encodType = 'UTF-32LE';
else if ($first2 == UTF16_BIG_ENDIAN_BOM)
  $encodType = 'UTF-16BE';
else if ($first2 == UTF16_LITTLE_ENDIAN_BOM)
  $encodType = 'UTF-16LE';

$content = file_get_contents($newPath);

$content = iconv($encodType, "utf-8", $content);

终极版·····

$text = file_get_contents($filePath);
//$encodType = mb_detect_encoding($text);
define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
$encodType = "";
if ($first3 == UTF8_BOM)
  $encodType = 'UTF-8 BOM';
else if ($first4 == UTF32_BIG_ENDIAN_BOM)
  $encodType = 'UTF-32BE';
else if ($first4 == UTF32_LITTLE_ENDIAN_BOM)
  $encodType = 'UTF-32LE';
else if ($first2 == UTF16_BIG_ENDIAN_BOM)
  $encodType = 'UTF-16BE';
else if ($first2 == UTF16_LITTLE_ENDIAN_BOM)
  $encodType = 'UTF-16LE';
//下面的判断主要还是判断ANSI编码的·
if ($encodType == '') {//即默认创建的txt文本-ANSI编码的
  $content = iconv("GBK", "UTF-8", $text);
} else if ($encodType == 'UTF-8 BOM') {//本来就是UTF-8不用转换
  $content = $text;
} else {//其他的格式都转化为UTF-8就可以了
  $content = iconv($encodType, "UTF-8", $text);
}

以上的终极版·可以适应中文操作windows系统建立的ANSI``````````````UTF-8`````````Unicode`````的txt文本····

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP跳转页面的几种实现方法详解
Jun 08 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 PHP
php经典趣味算法实例代码
Jan 21 #PHP
php利用ZipArchive类操作文件的实例
Jan 21 #PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 #PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 #PHP
PHP单元测试配置与使用方法详解
Dec 27 #PHP
PHP全局使用Laravel辅助函数dd
Dec 26 #PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 #PHP
You might like
php ZipArchive压缩函数详解实例
2013/11/06 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python不带重复的全排列代码
2013/08/13 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python中实现k-means聚类算法详解
2017/11/11 Python
解决python删除文件的权限错误问题
2018/04/24 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
秘书专业自荐信范文
2013/12/26 职场文书
高中生的自我评价
2014/03/04 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
学校联谊协议书
2014/09/16 职场文书
公司人事任命通知
2015/04/20 职场文书
高一军训口号
2015/12/25 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python