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&mysql(一)
Oct 09 PHP
PHP4在Windows2000下的安装
Oct 09 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
优化PHP程序的方法小结
Feb 23 PHP
php中将汉字转换成拼音的函数代码
Sep 08 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 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关联链接常用代码
2012/11/05 PHP
php生成静态页面的简单示例
2014/04/17 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
js初始化验证实例详解
2016/11/26 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python面试题小结附答案实例代码
2019/04/11 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
为什么需要版本控制?
2013/08/08 面试题
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
致铅球运动员广播稿精选
2014/01/12 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
计算机软件专业求职信
2014/06/10 职场文书
催款函范本大全
2015/06/24 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android