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使用的编码方式的呢,才能保证不乱码。 展开
$handler=fopen('a.txt','rb')//二进制方式打开
$content=fread($handler,1024);
echo $content;
?>
fread以字符串形式返回,那它是如何识别a.txt使用的编码方式的呢,才能保证不乱码。 展开
展开全部
PHP7.0以下的版本的文件操作中没有识别字符编码。
只是按字节数据输出,如果和php源码文件和输出的html的字符编码一致就能正确显示..
只是按字节数据输出,如果和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字符';//这样就会乱码
尽量用英文字母吧...
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询