您的位置:首页 > Web前端 > JavaScript

json_encode、scandir()和操作系统编码的关系。

2017-01-16 00:07 330 查看
在写一个将后台获取的目录名传到前台时,遇到一个问题。

代码如下:

//切换到根目录
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 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息