Problème avec une expression régulière ereg_replace
4 messages
• Page 1 sur 1
-

julien__ - WRInaute occasionnel

- Messages: 362
- Inscription: 28 Déc 2006
Problème avec une expression régulière ereg_replace
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...
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é

- Messages: 808
- Inscription: 15 Avr 2007
Re: Problème avec une expression régulière ereg_replace
Essaye ça :
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
- 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

- Messages: 362
- Inscription: 28 Déc 2006
Re: Problème avec une expression régulière ereg_replace
Si ça me convient??? C'est la classe
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?
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?
4 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- problème expression régulière
- Problème sur expression régulière
- Petit problème avec un expression régulière.
- Probleme avec une expression regulière
- Problème pour définir une expression régulière.
- probleme de slash dans une expression reguliere
- probleme dans mon expression reguliere pour le rewriting
- re expression régulière...
- Expression régulière
- expression réguliere!please help!!!
- Sandbox, blacklistage et autres pénalités de Google - 16-03-2005
- Définition(s) du Web 2.0 - 10-03-2006
- Nouvelle étude de WebRankInfo : les mots-clés et le référencement - 04-01-2003
- Mise à jour des services Postini - 11-02-2009
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
