So entfernen Sie die Erweiterung aus dem Dateinamen (nur echte Erweiterung!) [duplicate]

Lesezeit: 4 Minuten

Marcs Benutzeravatar
Marc

Ich suche nach einer kleinen Funktion, mit der ich die Erweiterung aus einem Dateinamen entfernen kann.

Ich habe beim Googeln viele Beispiele gefunden, aber sie sind schlecht, weil sie nur einen Teil der Zeichenfolge mit „.“ entfernen. . Sie verwenden den Punkt als Begrenzer und schneiden einfach die Saite ab.

Schauen Sie sich diese Skripte an,

$from = preg_replace('/\.[^.]+$/','',$from);

oder

 $from=substr($from, 0, (strlen ($from)) - (strlen (strrchr($filename,'.'))));

Wenn wir die Zeichenfolge wie folgt hinzufügen:

Dies ist ein Beispiel für eine Zeichenfolge

Es wird nur „Dies“ zurückgegeben …

Die Erweiterung kann 3 oder 4 Zeichen lang sein, daher müssen wir prüfen, ob sich der Punkt an der 4. oder 5. Stelle befindet, und ihn dann entfernen.

Wie kann es gemacht werden?

  • Was ist eine „echte“ Erweiterung? Sie möchten die letzten 4 oder die letzten Zeichen entfernen, wenn ihnen ein Punkt vorangestellt ist?

    – Clyfe

    7. März 2010 um 10:18

  • „Col. Shrapnel“ – es ist für Windows-Benutzer konzipiert. „clyfe“ – ja, ich möchte alles nach dem Punkt entfernen, aber nur, wenn es sich auf Position 4 oder 5 befindet, was „.jpeg“ oder „.mp3“ darstellt. Ich möchte es einfach nicht entfernen. Ich weiß, dass ich es manuell mit str-pos machen und die Zeichenfolge mit der if-Anweisung ausschneiden kann (wenn 5 pos = Punkt, dann schneide (rtrim) von rechts 5 Zeichen, wenn 4 pos = Punkt, dann rtrim 4, andernfalls ohne Änderung zurückkehren. Aber Vielleicht ist es die schnellere Lösung.

    – Marc

    7. März 2010 um 10:30 Uhr

  • Was ist mit .package-Dateien? Oder .Einheit? Es scheint etwas willkürlich, eine Erweiterung auf 4 Zeichen zu beschränken.

    – rdb

    16. September 2016 um 0:03

  • Wenn Marc zurückkommt, hoffe ich, dass er die akzeptierte Antwort ändert.

    – HoldOffHunger

    7. Januar 2022 um 2:24

Benutzer-Avatar von Timo Huovinen
Timo Huovinen

http://php.net/manual/en/function.pathinfo.php

pathinfo – Gibt Informationen über einen Dateipfad zurück

$filename = pathinfo('filename.md.txt', PATHINFO_FILENAME); // returns 'filename.md'

Nickfs Benutzeravatar
nickf

Probier diese:

$withoutExt = preg_replace('/\.\w+$/', '', $filename);

Dies entspricht also einem Punkt gefolgt von Wortzeichen ([a-zA-Z0-9_]), die weder ein Punkt noch ein Leerzeichen sind.

  • Das Problem ist, dass es auch Leute gibt, die Dateien umbenennen wie:20120720.something.somethingelse.jpg

    – Obmerk Kronen

    22. Juli 2012 um 3:27

  • Ich glaube nicht, dass dies mit Dateien mit zwei Zeichen als Erweiterung funktionieren wird

    – NaturalBornCamper

    23. August 2012 um 19:18 Uhr

  • Ty! Bitte beachten Sie, dass Sie einfache Anführungszeichen verwenden sollten, wenn Sie beispielsweise keine Variablenersetzung durchführen "$var"

    – aelgoa

    29. Okt. 2013 um 18:20 Uhr

  • Nun, um es mit .py-Dateien zu verwenden, müssen Sie wohl 2,3,4 statt nur 3,4 hinzufügen:> Danke!

    – voghDev

    13. Juni 2014 um 10:49

  • @voghDev zur Unterstützung von Erweiterungen mit 2 bis 4 Zeichen, die Sie hinzufügen sollten {2,4} anstatt {3,4}

    – Timo Huovinen

    19. Juni 2014 um 6:37

Eriks Benutzeravatar
Erik

Aus dem Handbuch, Pfadinfo:

<?php
    $path_parts = pathinfo('/www/htdocs/index.html');

    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
?>

Es muss kein vollständiger Pfad sein, um ordnungsgemäß zu funktionieren. Es wird genauso gerne analysiert file.jpg als /path/to/my/file.jpg.

  • Ich habe das bereits überprüft. Gleicher Fehler wie oben. Versuchen Sie, auf „$path_parts“ zuzugreifen[‘filename’]” from T.sec – “xxx” 23 12 32 3 a twym2 Es wird nur T zurückgegeben. Aus dem obigen Beispiel sollte es nichts entfernen!

    – Marc

    7. März 2010 um 10:26

Verwenden PHP-Basisname()

(PHP 4, PHP 5)

var_dump(basename('test.php', '.php'));

Ausgaben: string(4) „test“

Benutzeravatar von wprenison
wprenison

Dies ist eine ziemlich einfache Lösung und funktioniert unabhängig von der Länge der Erweiterung oder der Anzahl der Punkte oder anderen Zeichen in der Zeichenfolge.

$filename = "abc.def.jpg";

$newFileName = substr($filename, 0 , (strrpos($filename, ".")));

//$newFileName will now be abc.def

Im Grunde wird nur nach dem letzten Vorkommen von gesucht. und verwendet dann eine Teilzeichenfolge, um alle Zeichen bis zu diesem Punkt abzurufen.

Es ähnelt einem Ihrer gegoogelten Beispiele, ist jedoch einfacher, schneller und einfacher als reguläre Ausdrücke und die anderen Beispiele. Na ja, meiner Meinung nach jedenfalls. Hoffe, es hilft jemandem.

  • Ich weiß, das kommt viel zu spät, aber ich denke, das ist die beste Antwort. Funktioniert super.

    – Agbogidi Michael

    29. Juni 2017 um 21:03

  • Dies funktioniert beispielsweise nicht für *nix-versteckte Dateien ohne Erweiterung. .htaccess

    – Fr0zenFyr

    3. Juli 2019 um 6:29

Benutzer-Avatar von Alex
Alex

Empfohlene Verwendung: pathinfo mit PATHINFO_FILENAME

$filename="abc_123_filename.html";
$without_extension = pathinfo($filename, PATHINFO_FILENAME);

  • Ich weiß, das kommt viel zu spät, aber ich denke, das ist die beste Antwort. Funktioniert super.

    – Agbogidi Michael

    29. Juni 2017 um 21:03

  • Dies funktioniert beispielsweise nicht für *nix-versteckte Dateien ohne Erweiterung. .htaccess

    – Fr0zenFyr

    3. Juli 2019 um 6:29

Sie könnten das integrierte PHP zur Unterstützung nutzen …

$withoutExt = pathinfo($path, PATHINFO_DIRNAME) . "https://stackoverflow.com/" . pathinfo($path, PATHINFO_FILENAME);

Wenn Sie jedoch nur mit einem Dateinamen arbeiten (.somefile.jpg), Sie erhalten…

./somefile

Sehen Sie es auf CodePad.org

Oder verwenden Sie einen regulären Ausdruck …

$withoutExt = preg_replace('/\.' . preg_quote(pathinfo($path, PATHINFO_EXTENSION), "https://stackoverflow.com/") . '$/', '', $path);

Sehen Sie es auf CodePad.org

Wenn Sie keinen Pfad, sondern nur einen Dateinamen haben, funktioniert dies und ist viel prägnanter …

$withoutExt = pathinfo($path, PATHINFO_FILENAME);

Sehen Sie es auf CodePad.org

Natürlich suchen beide nur nach der letzten Periode (.).

  • Wie in der letzten Zeile der Lösung erwähnt, schlägt dies bei Dateinamen wie folgt fehl .htaccess

    – Fr0zenFyr

    3. Juli 2019 um 6:31 Uhr

1454440cookie-checkSo entfernen Sie die Erweiterung aus dem Dateinamen (nur echte Erweiterung!) [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy