php 读取文件乱码问题

2015-01-24信息快讯网

php 5的流读取函数好像默认编码是UTF-8,以前在php 4里直接file_get_contents()读取gb2312编码的正常,到了5就乱码了。

网上的解决办法说抓取后用iconv()转码。看后我就觉 得不对劲:一个是不一定编译了iconv库,更大的问题是编码都跟流转换的时候有关(如果用了iconv实际上php转了两次码:流 -> UTF-8 -> GB2312):这不是白忙乎了吗?

仔细看了下php的文档(不知道大家都是怎么写代码的,其实文档上很清楚啊),上面关于fopen()及file_get_contents()都 提到了“默认是UTF-8,但是用户可以用stream_default_encoding()或者用户自定义上下文属性改变编码”(If unicode semantics are enabled, the default encoding of the read data is UTF-8. You can specify a different encoding by creating a custom context or by changing the default using stream_default_encoding().)。于是用stream_default_encoding('gb2312′);测试:但是 faint的是,这个函数不存在?!似乎php 6才支持。不过天无绝人之路,还有“用户自定义上下文属性”可以用。

经过更仔细的看文档,最后解决了这个问题:
 
//设置流的编码格式,这是文件流(file),如果是网络访问,file改成http 
$opts = array('file' => array('encoding' => 'gb2312')); 
$ctxt = stream_context_create($opts); 
file_get_contents(文件名, FILE_TEXT, $ctxt); 
PHP 获取MySQL数据库里所有表的实现代码
PHP setcookie设置Cookie用法(及设置无效的问题)
php中使用explode查找某个字符是否存在的方法
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
php array_pop()数组函数将数组最后一个单元弹出(出栈)
php 目录与文件处理-郑阿奇(续)
PHP导出MySQL数据到Excel文件(fputcsv)
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
php中比较简单的导入phpmyadmin生成的sql文件的方法
php dirname(__FILE__) 获取当前文件的绝对路径
php新建文件自动编号的思路与实现
PHP如何解决网站大流量与高并发的问题
php session安全问题分析
PHP字符编码问题之GB2312 VS UTF-8解决方法
PHP读取网页文件内容的实现代码(fopen,curl等)
PHP读取ACCESS数据到MYSQL的代码
用PHP读取和编写XML DOM的实现代码
PHP文件读写操作之文件读取方法详解
PHP目录函数实现创建、读取目录教程实例
PHP+ajax 无刷新删除数据
判断是否为指定长度内字符串的php函数
支持数组的ADDSLASHES的php函数
php htmlspecialchars加强版
php 数组二分法查找函数代码
在字符串指定位置插入一段字符串的php代码
php foreach 使用&(与运算符)引用赋值要注意的问题
两个开源的Php输出Excel文件类
php下把数组保存为文件格式的实例应用
php 获取当前访问的url文件名的方法小结
用php实现的下载css文件中的图片的代码
php读取xml实例代码
php获取url字符串截取路径的文件名和扩展名的函数
PHP 读取文件内容代码(txt,js等)
PHP MYSQL乱码问题,使用SET NAMES utf8校正
php读取html并截取字符串的简单代码
php操作sqlserver关于时间日期读取的小小见解
PHP 进程锁定问题分析研究
php UTF8 文件的签名问题
浅谈PHP 闭包特性在实际应用中的问题
PHP 读取和修改大文件的某行内容的代码
©2014-2024 dbsqp.com