Home > Article > Backend Development > TP小问题
使用TP遍历Public文件夹下某个目录的所有文件名,测试了下,发现中文文件名都显示乱码,
文件都是UTF-8编码的。原生PHP测试中使用没有这个问题。特来请教。
以下是TP中代码部分:
public function index(){ $dir="./Public/Articles"; //文章目录 $data=$this->dirList($dir); $arr=array(); foreach($data as $v){ $arr[]=$v; } print_r($arr); //中文乱码 $this->ajaxReturn($arr); } public function dirList($dir){ $arr=scandir($dir); foreach($arr as $val){ if($val!='.' && $val!='..'){ $arr2[]=$val; } } return $arr2; }
window 系统的中文文件名都是 gbk 编码的
您认为是小问题吗?非也!
如果连赖以生存的环境都不甚了了,不出大问题才怪呢
您认为是小问题吗?非也!
如果连赖以生存的环境都不甚了了,不出大问题才怪呢
在ajaxReturn前设置header头呢?
header('Content-type:application/json;charset=utf-8');
在ajaxReturn前设置header头呢?
header('Content-type:application/json;charset=utf-8');
在ajaxReturn前设置header头呢?
header('Content-type:application/json;charset=utf-8');
1、linux 系统的默认字符集是 utf-8
2、简体中文 windows 系统的默认字符集是 gbk
3、TP 的工作字符集是 utf-8
所以 TP 在 linux 中不会有问题
但在 windows 中就会有乱码问题
所以你在读取文件名后,要根据操作系统做字符集转换
php 的 json 函数只支持 utf-8 字符集
PHP打开一个中文文本,还要转个编码,实在是太土了
这只是你自己再给你自己找麻烦
1、linux 系统的默认字符集是 utf-8
2、简体中文 windows 系统的默认字符集是 gbk
3、TP 的工作字符集是 utf-8
所以 TP 在 linux 中不会有问题
但在 windows 中就会有乱码问题
所以你在读取文件名后,要根据操作系统做字符集转换
php 的 json 函数只支持 utf-8 字符集
PHP打开一个中文文本,还要转个编码,实在是太土了
这只是你自己再给你自己找麻烦
在同一环境中显示不同编码的数据,总是要有乱码出现的
windows下的文件名需要执行iconv('GBK','UTF-8',$name); 才能utf8编码输出。
windows读取中文文件名就是要转编码
最好的方式就是换linux,比如windows上装个linux虚拟机什么的
不然就封一个读文件的函数,读文件统一用那个函数,函数里写转换
windows下的文件名需要执行iconv('GBK','UTF-8',$name); 才能utf8编码输出。
windows读取中文文件名就是要转编码
最好的方式就是换linux,比如windows上装个linux虚拟机什么的
不然就封一个读文件的函数,读文件统一用那个函数,函数里写转换
gbk->utf8
$file = mb_convert_encoding($file, 'utf-8', 'UTF-8,GBK,ASCII');
utf8->gbk
$file = iconv('UTF-8', 'GBK//IGNORE', $file);
gbk->utf8
$file = mb_convert_encoding($file, 'utf-8', 'UTF-8,GBK,ASCII');
utf8->gbk
$file = iconv('UTF-8', 'GBK//IGNORE', $file);