php fread()是如何识别文件编码的?

<?php$handler=fopen('a.txt','rb')//二进制方式打开$content=fread($handler,1024);echo$content;... <?php
$handler=fopen('a.txt','rb')//二进制方式打开
$content=fread($handler,1024);
echo $content;
?>
fread以字符串形式返回,那它是如何识别a.txt使用的编码方式的呢,才能保证不乱码。
展开
 我来答
百度网友9308069
推荐于2016-10-09 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1863万
展开全部
PHP7.0以下的版本的文件操作中没有识别字符编码。
只是按字节数据输出,如果和php源码文件和输出的html的字符编码一致就能正确显示..
更多追问追答
追问
这段代码是在cli下运行的,不输出到html。源码文件时和a.txt不一样时也能正常不乱吗,只有a.txt是ascll,fread就会读取乱码。fread()到底是如何判断编码的呢。
追答
fread不判断编码。r,rb的区别是处理不处理换行符
同样,只有环境、源码、数据三个要素中编码保持一致,或者可控,由源码输出时才不乱码。
CLI在windows的命令行下默认用的GBK编码显示。
源码需要另存为GBK,txt文件也要GBK这样直接print输出不乱

如果源码是UTF-8,txt文件是UTF16,这时需要在PHP中用

$gbk_text=iconv('UTF16', 'GBK', $u16_text);
echo $gbk_text;
转换成GBK后,而且能被成功转换后,才能正常显示

而且如果源码是和GBK不同的UTF-8,源码中是不能夹杂静态输出数据的,比如
echo $gbk_text.'夹杂的UTF8字符';//这样就会乱码

尽量用英文字母吧...
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式