PHP5.3 系统函数 pathinfo() 遇到带有英文连字符“-”的中文文件名时有BUG,如运行:
print_r(pathinfo('/dir/中文-测试.txt'));
结果是:
Array(
[dirname] => /dir
[basename] => -测试.txt
[extension] => txt
[filename] => -测试
)
“中文”两字丢失了。
于是在网上找了两个自定义函数来代替 pathinfo():
function path_info($filepath){
$path_parts = array();
$path_parts ['dirname'] = rtrim(substr($filepath, 0, strrpos($filepath, '/')),"/")."/";
$path_parts ['basename'] = ltrim(substr($filepath, strrpos($filepath, '/')),"/");
$path_parts ['extension'] = substr(strrchr($filepath, '.'), 1);
$path_parts ['filename'] = ltrim(substr($path_parts ['basename'], 0, strrpos($path_parts ['basename'], '.')),"/");
return $path_parts;
}
function mb_pathinfo($filepath) {
preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im',$filepath,$m);
if($m[1]) $ret['dirname']=$m[1];
if($m[2]) $ret['basename']=$m[2];
if($m[5]) $ret['extension']=$m[5];
if($m[3]) $ret['filename']=$m[3];
return $ret;
}