PHP - 从文件名字符串中剥离扩展名

时间:2011-05-05 13:53:38

标签: php string

我想从文件名中删除扩展名,并获取文件名 - 例如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;
}

返回一个空字符串。

我看不出我做错了什么?

6 个答案:

答案 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

实例: No. 1 | No. 2

答案 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));
}

CodePad

这个的唯一真正优势是,如果你正在运行&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));
}