preg_replace

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 09:35

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2007, 09:44

$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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 09:50

et comment faire alors pour que le point de l'extension de soit pas modifié en '-' ?

ViPHP
ViPHP | 3607 Messages

05 oct. 2007, 09:57

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

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 10:03

@ 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'],'.'));
...

?

ViPHP
ViPHP | 3607 Messages

05 oct. 2007, 10:09

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

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 10:09

ben non en fait ca marche pas, jsui con, ca récupère que l'extension ca

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 10:16

quelle est la fonction qui permet de récupérer tout avant un caractère défini ?

ViPHP
ViPHP | 3607 Messages

05 oct. 2007, 10:18

il faut combiner strrchr et substr ;)
un petit tour sur le manuel ;)

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 10:41

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

ViPHP
ViPHP | 5924 Messages

05 oct. 2007, 10:47

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…

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2007, 10:49

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()
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 11:01

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2007, 11:03

Pourquoi utilises-tu la fonction utf8_encode() ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 11:06

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