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开发中的错误收集,不定期更新。
Feb 03 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
yii添删改查实例
Nov 16 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
PHP导出Excel实例讲解
Jan 24 PHP
joomla组件开发入门教程
May 04 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 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下一个非常全面获取图象信息的函数
2008/11/20 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
Python编写Windows Service服务程序
2018/01/04 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
关爱女孩行动实施方案
2014/03/13 职场文书
幼儿园标语大全
2014/06/19 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技