PHP5.3 系统函数 pathinfo() 遇到带有英文连字符“-”的中文文件名时BUG

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;
}


你可能感兴趣的:(PHP5.3 系统函数 pathinfo() 遇到带有英文连字符“-”的中文文件名时BUG)