Problème avec une expression régulière ereg_replace


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Problème avec une expression régulière ereg_replace

Message le Lun Aoû 09, 2010 14:31

Bonjour, j'ai un problème avec une expression régulière que je n'arrive pas à mettre sur pieds...

Le but :

Transformer dans un texte des noms en liens.

Le texte :

Ceci est un texte d'exemple avec des noms propres, comme [p]Sébastien Rittout[/p] ou d'autres qui peuvent apparaître n'importe ou dans le texte [p]José Rigou[/p].

Les noms de personnes sont encadrée par des balises genre BBCode, tous les nom ont la balise [p] au début et la balise [/p] pour les terminer.

Voilà la transformation que je devrais arriver à faire :

[p]Jean-Paul Nicod[/p]

en

<a href="http://www.nomdedomaine.com/personne,jean-paul_nicod">Jean-Paul Nicod</a>

et ceci bien sûr avec n'importe quel nom, et toutes les occurrences dans le texte.

Pour remplacer les majuscules et les caractères spéciaux par leur équivalent, je me sert de cette fonction.

$chaine = strtolower(strtr($nom,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ' ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn-_"));

cela a pour effet de mettre le nom en minuscule et de remplacer les caractères spéciaux pour l'url rewriting.

Maintenant le but, c'est d'avoir une fonction, capable :

1. de mettre en miniuscule
2. de remplacer les caractères spéciaux par leur équivalent é en e etc...
3. et de transformer en lien

J'ai pensé à ereg_replace

Mais les caractères [] sont utilisés dans les expressions régulières pour délimiter des suites de caractères, il faut en plus y ajouter des caractères d'échappement. Je ne m'en sors pas!!!

Si quelqu'un a la science infuse des expressions régulières, cela m'aiderait grandement...


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Problème avec une expression régulière ereg_replace

Message le Lun Aoû 09, 2010 15:14

Essaye ça :
Code: Tout sélectionner
$str = preg_replace(
   '`\[p\](.+)\[\/p\]`Ue',
   '"<a href=\"http://www.nomdedomaine.com/personne," . to_permalink("\\1") . "\">\\1</a>"',
   $str
);

function to_permalink($str)
{
   if($str !== mb_convert_encoding( mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32') )
      $str = mb_convert_encoding($str, 'UTF-8');
   $str = htmlentities($str, ENT_NOQUOTES, 'UTF-8');
   $str = preg_replace('`&([a-z]{1,2})(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i', '\\1', $str);
   $str = html_entity_decode($str, ENT_NOQUOTES, 'UTF-8');
   $str = preg_replace(array('`[^a-z0-9]`i','`[_]+`'), '_', $str);
   $str = strtolower( trim($str, '_') );
   return $str;
}


ereg_replace est déprécié, autant directement utiliser preg_replace.
Le code ci-dessus utilise ma 'tite fonction to_permalink() légèrement modifiée pour convenir à ton besoin.

J'espère que ca conviendra ;)


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Re: Problème avec une expression régulière ereg_replace

Message le Lun Aoû 09, 2010 16:57

Si ça me convient??? C'est la classe :D ou plutôt devrais-je dire la fonction!

Je suis épaté ça marche vite, bien et sans bug, j'ai déjà testé avec tous les cas de figure et caractères spéciaux...

Un très très grand merci, cela faisait un moment déjà que je devais résoudre ce problème pour pouvoir avancer mieux et bien dans mes projets...

Tu dois avoir beaucoup d'amis? :)


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Problème avec une expression régulière ereg_replace

Message le Lun Aoû 09, 2010 18:19

Pas de quoi, on est la pour s'entraider :wink:
Content que ça te convienne :D


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité