我想从文件名中删除扩展名,并获取文件名 - 例如file.xml - > file,image.jpeg - > image,test.march.txt - > test.march等。
所以我写了这个函数
function strip_extension($filename) {
$dotpos = strrpos($filename, ".");
if ($dotpos === false) {
$result = $filename;
}
else {
$result = substr($filename,0,$dotpos);
}
return $result;
}
返回一个空字符串。
我看不出我做错了什么?
答案 0 :(得分:22)
我相信pathinfo
。从手册:
<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>
结果:
/www/htdocs/inc
lib.inc.php
php
lib.inc
让自己头疼并使用已经构建的功能。 ; - )
答案 1 :(得分:6)
你应该使用pathinfo
来做到这一点。
示例:强>
使用的东西:pathinfo()
$name = 'file.php';
$pathInfo = pathinfo($name);
echo 'Name: '. $pathInfo['filename'];
结果:
Name: file
示例2(更短)
$name = 'file.php';
$fileName= pathinfo($name, PATHINFO_FILENAME );
echo "Name: {$fileName}";
结果:
Name: file
答案 2 :(得分:1)
这个非常简单的功能可以解决这个问题:
function strip_extension($filename)
{
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$regexp = '@\.'.$extension.'$@';
return preg_replace($regexp, "", $filename);
}
答案 3 :(得分:1)
这是一个简短的。只要知道你是否通过一条路径,你就会丢失路径信息:)
function stripExtension($filename) {
return basename($filename, '.' . pathinfo($filename, PATHINFO_EXTENSION));
}
这个的唯一真正优势是,如果你正在运行&lt; PHP 5.2。
答案 4 :(得分:0)
function strip_extension($filename){
if (isset(pathinfo($filename)['extension'])) { // if have ext
return substr($filename, 0, - (strlen(pathinfo($filename)['extension'] +1)));
}
return $filename; // if not have ext
}
您必须验证文件名是否具有扩展名以使pathinfo没有错误。正如http://php.net/manual/en/function.pathinfo.php
中所述答案 5 :(得分:0)
可能不是最有效的,但实际上它回答了这个问题。
function strip_extension($filename){
$f = array_reverse(str_split($filename));
$e = array();
foreach($f as $p){
if($p == '.'){
break;
}else{
array_push($e,$p);
}
}
return implode('',array_reverse($e));
}