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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
php编写一个简单的路由类
Apr 13 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
PHP Trait功能与用法实例分析
Jun 03 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 中的输出缓冲
2006/12/21 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
解放web程序员的输入验证
2006/10/06 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
解读Python编程中的命名空间与作用域
2015/10/16 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
Python中extend和append的区别讲解
2019/01/24 Python
python地震数据可视化详解
2019/06/18 Python
python中可以声明变量类型吗
2020/06/18 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
主持词开场白
2014/03/17 职场文书
《长相思》听课反思
2014/04/10 职场文书
英语教育专业自荐信
2014/05/29 职场文书
环境卫生标语
2014/06/09 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL