Page 1 sur 2

preg_replace

Posté : 05 oct. 2007, 09:35
par Invité
Bonjour, j'aurais voulu savoir exactement ce que fait cette fonction :
$str = str_replace('.', '-', $str);
$str = preg_replace('/[^\w]+/', '-', $str);
$str = trim($str, '-');
Quels sont les caract_res modifiés ?

Merci.

Posté : 05 oct. 2007, 09:44
par zeus
$str = str_replace('.', '-', $str); 
remplace le '.' par '-'

\w est un type générique qui correspond à tout caractère de "mot" [A-Za-z0-9_] plus les accentués
^ étant la négation, ^\w signifie donc tout caractère qui n'est pas dans [A-Za-z0-9_] plus les accentués.
$str = preg_replace('/[^\w]+/', '-', $str); 
remplace donc tout caractères qui n'est pas dans [A-Za-z0-9_] plus les accentués par un '-'
$str = trim($str, '-');
remplace les espaces en début et en fin de chaine par le caractère '-'.


Visiblement, la 1ère ligne est inutile puisque le caractère . n'étant pas dans le type \w, il sera remplacé avec le preg_replace() :-k

Posté : 05 oct. 2007, 09:50
par Invité
et comment faire alors pour que le point de l'extension de soit pas modifié en '-' ?

Posté : 05 oct. 2007, 09:57
par jojolapine
il faut appliquer cet ensemble de fonctions simplement sur le nom du fichier sans extension...
Et au passage, si c'est pour renommer des fichiers ou des url, je te conseil de virer \w au profit de [a-zA-Z0-9_-], parceque les accents dans des urls (web ou dossiers perso) c'est pas le top ;)

Posté : 05 oct. 2007, 10:03
par Invité
@ jojolapine, avant j'utilise une fonction (tirée de wordpress) remove_accents qui remplace les caractères accentués.
Donc je vais appliquer ces fonctions finalement au nom du fichier sans l'extension donc comme ca :

preg_replace(strrchr($_FILES['fichier_fr']['name'],'.'));
...

?

Posté : 05 oct. 2007, 10:09
par jojolapine
A toi de me le dire ;)
As-tu essayer?
Sinon même si il n'y a plus d'accents, autant limité les recherches de preg_replace et ne tester que la classe de caractère sus-citée...

Posté : 05 oct. 2007, 10:09
par Invité
ben non en fait ca marche pas, jsui con, ca récupère que l'extension ca

Posté : 05 oct. 2007, 10:16
par Invité
quelle est la fonction qui permet de récupérer tout avant un caractère défini ?

Posté : 05 oct. 2007, 10:18
par jojolapine
il faut combiner strrchr et substr ;)
un petit tour sur le manuel ;)

Posté : 05 oct. 2007, 10:41
par Invité
je dois etre pas très réveillé mais là je ne vois pas comment faire pour récupérer tout ce qu'il y a avant le point de l'extension.
Il faut aussi utiliser strlen() ?

Posté : 05 oct. 2007, 10:47
par Sékiltoyai
Ou alors preg_match() marche bien, et quand on le maîtrise, c'est beaucoup plus pratique que les fonctions de chaine de caractère…
Sinon, strrchr() te trouve la position du caractère que tu cherches en partant de la fin. Et ensuite, substr() te permet de récupérer une sous chaine d'une position à une autre, ce qui te donne la chaine que tu veux, pas besoin de strlen() là dedans…

Posté : 05 oct. 2007, 10:49
par zeus
Si ton but est de récupérer le nom du fichier sans l'extension, plutôt que de développer des fonctions hasardeuses, je te conseille d'utiliser pathinfo()

Posté : 05 oct. 2007, 11:01
par Invité
en fait j'ai fait comme ca :
function reverse_strrchr($string, $car) {$pos = strrpos($string, $car);
    if($pos === false) {
        return $string;
    }
    return substr($string, 0, $pos );
}
ensuite j'applique à ça la finction qui me permet de me débarasser des accents, et autres caractères puis j'applique la fonction utf8_encode().

Seulement j'ai un petit problème, comment me débarasser du ® ?

Posté : 05 oct. 2007, 11:03
par zeus
Pourquoi utilises-tu la fonction utf8_encode() ?

Posté : 05 oct. 2007, 11:06
par Invité
car j'utilise des fichiers xml et ca me permet d'etre sur que le texte dans mes fichiers xml sera bien encode au bon format