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 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
php 函数使用方法与函数定义方法
May 09 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
php生成数字字母的验证码图片
Jul 14 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
PHP unset函数原理及使用方法解析
Aug 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
python使用列表的最佳方案
2020/08/12 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
Python之Sklearn使用入门教程
2021/02/19 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
毕业生文员求职信
2013/11/03 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS