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 。
代码如下:
//切换到根目录
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 。
相关文章推荐
- json_encode编码 和json_decode解码
- 解决php函数json_encode转换后中文被编码为unicode
- PHP中json_encode中文编码的问题
- php使用json_encode对变量json编码
- PHP学习散记_编码(json_encode 中文不显示)
- php中json_encode中文编码问题
- json_encode不编码中文字符的方式
- php json_encode只支持utf-8编码
- php json_encode中文unicode编码问题
- json_encode — 对变量进行 JSON 编码
- PHP解决json_encode中文变成unicode编码
- json_encode不编码中文字符的方式
- php json_encode不支持gbk gb2312编码的处理方法
- EXTJS学习系列基础篇:第四篇(转载)作者殷良胜,Ext中有两个很重要的方法,一个是decode;一个是encode.顾名思义,一个是编码,一个是解码,你难道真的这么想吗?严格的说,一个是将json字符串转换成对象;一个是将对象转换成json字符串
- php的json_encode()中文编码问题
- json_encode只支持UTF8编码的字符
- mysqludf_json将关系数据以JSON编码
- json_encode中文编码设置
- 由于文件编码问题造成json_encode 中文变成null的解决办法
- php json_encode()函数保持中文编码