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之第五天
Oct 09 PHP
php SQL Injection with MySQL
Feb 27 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
浅析php数据类型转换
Jan 09 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
Yii2中datetime类的使用
Dec 17 PHP
php实现的中文分词类完整实例
Feb 06 PHP
vmware linux系统安装最新的php7图解
Apr 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生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php 实现进制相互转换
2016/04/07 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
python模块如何查看
2020/06/16 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
python把一个字符串切开的实例方法
2020/09/27 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
宿舍卫生检讨书
2014/01/16 职场文书
学校安全工作制度
2014/01/19 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
财务主管岗位职责
2014/02/28 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
mysql部分操作
2021/04/05 MySQL
SQL之各种join小结详细讲解
2021/08/04 MySQL
进行数据处理的6个 Python 代码块分享
2022/04/06 Python