【问题标题】:PHP - stripping the extension from a file name stringPHP - 从文件名字符串中剥离扩展名
【发布时间】:2018-02-09 06:58:11
【问题描述】:

我想从文件名中去除扩展名,并获取文件名 - 例如file.xml -> 文件、image.jpeg -> 图像、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;
}

返回一个空字符串。

我看不出我做错了什么?

【问题讨论】:

    标签: php string


    【解决方案1】:

    我相信正在寻找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
    

    省去你的麻烦,使用已经构建的函数。 ;-)

    【讨论】:

    • 你比我早了 35 秒 :P
    • 问题是,OP 只有文件name,没有完整的文件路径
    • @dosboy: : 吹掉手指并将它们重新固定到一边:;-)
    • 见鬼,我是忍者,但我有自己的例子:)
    • 我的错,我认为pathinfo() 仅适用于有效的路径/文件。拥有:x
    【解决方案2】:

    你应该使用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 拯救了这一天。
    【解决方案3】:

    这个非常简单的函数可以解决问题:

    function strip_extension($filename)
    {
        $extension = pathinfo($filename, PATHINFO_EXTENSION);
        $regexp = '@\.'.$extension.'$@';
        return preg_replace($regexp, "", $filename);
    }
    

    【讨论】:

    • 你转义转义字符?有必要吗?
    【解决方案4】:

    这是一个简短的。只要知道如果您通过路径,您将丢失路径信息:)

    function stripExtension($filename) {
       return basename($filename, '.' . pathinfo($filename, PATHINFO_EXTENSION));
    }
    

    CodePad.

    这个唯一真正的好处是如果你运行的是

    【讨论】:

      【解决方案5】:
      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
      }
      

      您必须验证文件名是否具有扩展名才能没有路径信息错误。如http://php.net/manual/en/function.pathinfo.php中所述

      【讨论】:

      • 您可以只使用pathinfo($filename, PATHINFO_EXTENSION) 来获取一个字符串,而不需要在数组上调用isset()。
      【解决方案6】:

      可能不是最有效的,但它确实回答了问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2013-06-02
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        相关资源
        最近更新 更多