在写一个将后台获取的目录名传到前台时,遇到一个问题。
代码如下:
//切换到根目录
chdir("/");
//获得当前目录
$dir = getcwd();
$file_dir_arr = scandir($dir);
foreach ($file_dir_arr as $key => $value) {
if(is_dir($dir."/".$value)){
$dir_arr[] = $value;
}
}
echo json_encode($dir_arr);
在window 10中文简体版上运行,可是输出结果空白。print_r($dir_arr); 可以正常打印,获取的目录名中存在中文目录。查看php手册发现 json_encode() 只能接受utf-8,那么可能的原因就是 $file_dir_arr 不是 utf-8 编码。
echo mb_detect_encoding($dir_arr[38], array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); 其中$dir_arr[38] 是中文目录名,输出 EUC-CN.
百度得知:EUC-CN是GB2312最常用的表示方法。可知scandir() 函数的返回值其编码是EUC-CN,所以json_encode()无法处理。
如果将上述代码放到linux系统下运行,并且存在中文目录的情况下,echo mb_detect_encoding($dir_arr[38], array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));输出 uft-8 。