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

来源:互联网 发布:mac os pkg 安装u盘 编辑:程序博客网 时间:2024/06/01 10:59

在写一个将后台获取的目录名传到前台时,遇到一个问题。

代码如下:

//切换到根目录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 。






0 0
原创粉丝点击