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动态变静态原理
Nov 25 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
解析php时间戳与日期的转换
Jun 06 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
使用PHP Socket 编程模拟Http post和get请求
Nov 25 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php之curl设置超时实例
2014/11/03 PHP
判断用户是否在线的代码
2011/03/05 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
python3 反射的四种基本方法解析
2019/08/26 Python
python requests证书问题解决
2019/09/05 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Python实现随机爬山算法
2021/01/29 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
自我鉴定书
2014/03/24 职场文书
小学校园广播稿
2015/08/18 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
Python函数式编程中itertools模块详解
2021/09/15 Python
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
Python中三种花式打印的示例详解
2022/03/19 Python