查了下原生php的basename()好像并不能处理中文文件名,所以查到网上有人给出了如下自定义函数:
function get_basename($filename){
return preg_replace('/^.+[\\\\\\/]/', '', $filename); //我觉得正则可以写为'/^.+[\\/]/'
}
对于该函数有3点需要说明:
1. 不能处理以”/”结尾的目录名;
2. 不支持第二个参数suffix;
3. 正则表达式比较消耗系统资源。
因此,我给出了仅使用字符串处理函数的版本,弥补以上3点缺陷:
function get_basename($filename,$suffix='') {
$f=$filename;
$f=rtrim($f,'/');
$startPos=strrpos($f,'/');
$startPos=($startPos !== FALSE) ? $startPos+1 : 0;
$f=substr($f, $startPos);
if(!empty($suffix)) {
$filenameLen=strlen($f);
$checkEndPos=$filenameLen-strlen($suffix);
if(substr($f,$checkEndPos)===$suffix) {
$f=substr($f,0,$checkEndPos);
}
}
return $f;
}