155 votes

Comment enlever une extension d'une chaîne (seulement une vraie extension!)

Je suis à la recherche d'une petite fonction qui me permet de supprimer l'extension de nom de fichier.

J'ai trouvé beaucoup d'exemples sur google, mais ils sont mauvais, parce qu'ils viennent de retirer une partie de la chaîne "." . Ils utilisent dot pour le limiteur et vient de couper la chaîne.

Regardez ces scripts,

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

ou

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

Lorsque nous ajoutons de la chaîne comme ceci:

C'.est un exemple de somestring

Il sera de retour que "Cela"...

L'extension peut avoir 3 ou 4 caractères, nous devons donc vérifier si le point est 4 ou 5 position, puis la retirer.

Comment peut-il être fait?

353voto

Timo Huovinen Points 8283

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

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

187voto

nickf Points 185423

Essaye celui-là:

 $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $filename);
 

Donc, cela correspond à un point suivi de trois ou quatre caractères qui ne sont ni un point ni un espace. La règle "3 ou 4" devrait probablement être assouplie, car de nombreuses extensions de fichiers sont plus courtes ou plus longues.

85voto

Erik Points 12282

Du manuel, pathinfo :

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

Il ne doit pas être un chemin complet pour fonctionner correctement. Il analysera aussi bien file.jpg que /path/to/my/file.jpg .

61voto

Lamy Points 1127

Utiliser le nom de base PHP ()

(PHP 4, PHP 5)

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

Sorties: chaîne (4) "test"

40voto

wprenison Points 1

C'est une solution plutôt facile et fonctionnera peu importe la longueur de l'extension ou le nombre de points ou autres caractères de la chaîne.

 $filename = "abc.def.jpg";

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

//$newFileName will now be abc.def
 

Fondamentalement, cela ne fait que rechercher la dernière occurrence de. et utilise ensuite une sous-chaîne pour récupérer tous les caractères jusqu'à ce point.

C'est similaire à l'un de vos exemples googlé mais plus simple, plus rapide et plus facile que les expressions régulières et les autres exemples. Bien imo quand même. J'espère que ça aide quelqu'un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X