下面我们实现一个案例:上传一个文本文件,并且读取显示出来。
首先准备一个记事本文件:
原来编写代码,实现文件上传
上传成功后,显示文件内容
我们会发现,在浏览器中显示的中文出现乱码。这种情况 ,主要是因为记事本文件的编码格式是gbk,而我们写的程序代码的格式是utf-8格式,二者出现了不一致。
处理字符串编码转换的有两个函数:iconv, mb_convert_encoding
两个函数的语法如下:
string iconv ( string
$in_charset
, string$out_charset
, string$str
)表示把$str从$in_carset转换成$out_charset
string mb_convert_encoding ( string
$str
, string$to_encoding
[, mixed$from_encoding
] )表示把$str从$from_encoding转换成$to_encoding
控制器中的代码如下:
public function uploadtxt()
{
$file = request()->file('file');
if(empty($file)){
$this->error('没有上传文件或者上传文件超过' . ini_get('upload_max_filesize'));
}
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
$filepath = ROOT_PATH . 'public' . DS . 'uploads' . DS . $info->getSaveName();
$this->import($filepath);
}else{
$this->error('上传文件失败,' . $file->getError());
}
}
public function import($file)
{
$fp = fopen($file,'r');
while($data = fgets($fp)){
$data = iconv('gbk','utf-8',$data);
echo $data.'<br>';
}
fclose($fp);
}
通过上面的代码改造后,可以正常显示中文了