PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 01-06-2010 10:55:47

gsp
Membre
Inscription : 09-09-2009
Messages : 9

explode un point(.) à 3 caratères de la fin de la chaîne

Bonjour,

J'ai bidouillé une petite fonction pour écrire proprement les noms de fichiers de photos sans caratères interdits.
J'ai fait un explode sur le . de jpg, ça fonctionne pas trop mal.

function renomePhoto($photo){
//le explode sort comme résultat un tableau array[0] et array[1] qui sont les éléments de part et d'autre du point
$array=explode(".",$photo);

// strtolower passe en minuscule
$chaine = strtolower($array[0]);

//remplace les caractères de $tofind par ceux de $replace
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ .";
 
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn__";
 
$resultat=strtr($chaine,$tofind,$replac);

$resultat = "$resultat.$array[1]";

return($resultat);

}
echo renomePhoto('La Journée est Belle.jpg');

Petit souci, si le nom de fichier a des points dans le nom, (ex:photo.avec.des.points.par.exemple.jpg) ça ne fonctionne plus. Est-il possible de faire un explode seulement sur le dernier point du type de fichier et pas sur les autres éventuels point de la chaine ?

Merci de votre aide.

Hors ligne

#2 01-06-2010 11:19:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : explode un point(.) à 3 caratères de la fin de la chaîne

Saluton,
Remplace

$array=explode(".",$photo);

par

$photo=substr($photo,0,strpos(strrev($photo),'.')-1);

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 01-06-2010 14:25:34

gsp
Membre
Inscription : 09-09-2009
Messages : 9

Re : explode un point(.) à 3 caratères de la fin de la chaîne

Hello,

Merci Maljuna Kris de ta réponse, comme je ne suis pas super en Php, je ne ta cache pas que je n'ai pas tout compris à ton empilage de fonction.
Donc j'ai simplement suivi ton conseil, j'ai remplacé mon bout de code

$array=explode(".",$photo);

parle tient

$photo=substr($photo,0,strpos(strrev($photo),'.')-1);

ce qui une fois intégré donne

function renomePhoto($photo){
$photo = strtolower($photo);// strtolower passe en minuscule
$photo = trim($photo);// sup espace avant après
$photo=substr($photo,0,strpos(strrev($photo),'.')-1);
//remplace les caractères de $tofind par ceux de $replace
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ .";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn__";
$resultat=strtr($photo,$tofind,$replac);
return($resultat);
}
echo renomePhoto('La Journée est Belle.jpg');

Avec l'exemple de "'La Journée est Belle.jpg'" le résultat est "la" alors que je voudrais "la_journee_est_belle.jpg".

Si quelqu'un peut m'expliquer la proposition de Maljuna Kris, je pourrais peut-être comprendre où ça pèche.

Merci

Hors ligne

#4 01-06-2010 14:43:21

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : explode un point(.) à 3 caratères de la fin de la chaîne

$photo=substr($photo,0,strpos(strrev($photo),'.')-1);

substr = récupère dans la chaine $photo à partir de 0 et sur une longueur de X (voir la suite)
strpos = cherche la position dans la chaine $photo du caractère " . "
strrev = renverse le mot (ex : Bonjour devient ruojnoB) [utile pour ne trouver que le DERNIER "."]

En francais, pour détailler :

strrev($photo) te donne "gpj.elleb tse eenruoj al".
si on cherche la position du " . ", cela donne 4 (avec le -1, ça fait 3)

On récupére dans "la journee est belle.jpg" la chaine partant du caractère en position 0 jusqu'a celui en position 3
donc on a "la " (avec l'espace)

Il manque un paramètre : la longueur totale [strlen()] de la chaine pour "piocher" dans le reste !!

Tente avec un :


$photo = substr($photo,0,strlen($photo)-strpos(strrev($photo),'.')-1);
$tofind = 'tes caractères interdits';
$repace = 'ceux qui les remplacent';
$resultat=strtr($photo,$tofind,$replac);
// Sauf que ça ne te retournera que le nom du fichier, et non l'extension
// Pour cela, tu récupères ton extension en faisant :
$ext = substr($photo,strlen($photo)-(strpos(strrev($photo),'.')+1),strlen($photo);
// cette façon permet de gérer les extensions d'une longueur variable (car pas toujours égale à 3)
// et enfin tu fais une concatenation de ta variable $photo et $ext
$resultat = $photo.'.'.$ext;
 

MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#5 01-06-2010 22:08:58

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : explode un point(.) à 3 caratères de la fin de la chaîne

Oui, je suis allé un peu vite il faut prendre strlen($photo)-strpos(strrev($photo),'.') comme longueur de substr


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums