PHP > Besoin d'aide pour un bout de code

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

gcvoiron
WRInaute impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

PHP > Besoin d'aide pour un bout de code

Message le Mer Fév 07, 2007 22:51

Bonjour,

J'aurai besoin d'idées pour mettre en place un bout de code en PHP.
Je voudrai en fait remplacer des mots par d'autres dans mon forum, sauf si ils se trouvent entre les balises [url]et[/url].
La chaine de caractère s'appelle $chaine. Il faudrait en fait faire :
Code: Tout sélectionner
$chaine= str_replace("Mot11", "Mot22", $chaine);

si ce n'est pas entre [url]et[/url].

Auriez-vous des idées ?

Merci.


k2pi
WRInaute impliqué
WRInaute impliqué
 
Messages: 308
Inscription: Dim Fév 04, 2007 22:17

Message le Mer Fév 07, 2007 22:57

Tu fais une variable $tag_url = false; et des que tu rencontres une balise [url]tu la passe a true et tu la remet a false lorsque tu rencontre[/url]

en fonction de ca tu actives ou non le str_replace.

gcvoiron
WRInaute impliqué
WRInaute impliqué
 
Messages: 494
Inscription: Mer Oct 19, 2005 15:23

Message le Mer Fév 07, 2007 23:00

Ok merci, mais pour savoir qu'il y a balise [URL], comment faire ?
Une boucle for avec :
Code: Tout sélectionner
"$chaine[$i]$chaine[$i+1]$chaine[$i+2]$chaine[$i+3]$chaine[$i+4]"=="[URL]"

?
J'ai essayé mais en vain...


lupuz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 207
Inscription: Mer Mar 15, 2006 23:41

Message le Mer Fév 07, 2007 23:33

Regarde du côter de la fonction ereg_replace.
http://www.php.net/ereg_replace


La Chaise sauvage
WRInaute passionné
WRInaute passionné
 
Messages: 691
Inscription: Lun Avr 11, 2005 10:37

Message le Jeu Fév 08, 2007 9:34

sinon, je ne garantis pas l'efficacité pour de gros volumes de texte, mais cette solution fonctionne :


Code: Tout sélectionner
function gcvoiron_replace($cherche,$remplace,$chaine){
   $flag = TRUE;
   $tab = explode(' ',$chaine);
   $i=0;
   foreach($tab as $mot){
      if($flag){
         if(strpos(strtolower($mot),'[url]') !== FALSE) {
            $flag = FALSE;
         } else {
            $mot = str_replace($cherche,$remplace,$mot);
         }
      }
      if(strpos(strtolower($mot),'[/url]') !== FALSE) {
         $flag = TRUE;
      }
      $res .= $mot.' ';
      $i++;
   }
   return $res;
}


ce qui s'utilise évidemment comme ceci :

Code: Tout sélectionner
$string = "ceci est un test youpi [url]ceci est un test[/url] blabla test youpi ceci est un test youpi [URL] ceci est un test [/URL] blabla test youpi";

$ok = gcvoiron_replace('test','ok',$string);

echo 'Phrase initiale : '.$string;
echo '<br/>Phrase produite : '.$ok;


Et le résultat :

Phrase initiale : ceci est un test youpi [url]ceci est un test[/url] blabla test youpi ceci est un test youpi [url]ceci est un test[/url] blabla test youpi
Phrase produite : ceci est un ok youpi [url]ceci est un test[/url] blabla ok youpi ceci est un ok youpi [url]ceci est un test[/url] blabla ok youpi



Evidemment, si quelqu'un a des conseils quant à a l'optimisation de ceci, je suis preneur, c'est du vite fait 8)



edit : moui... ma fonction a quelques problèmes... notamment quand le mot recherché est en majuscules, ou quand il est collé à une balise ouvrante ou fermante... enfin bref c'est du bricolage, quoi
Dernière édition par La Chaise sauvage le Jeu Fév 08, 2007 9:53, édité 1 fois.


HawkEye
Modérateur
Modérateur
 
Messages: 15029
Inscription: Lun Fév 23, 2004 12:33

Message le Jeu Fév 08, 2007 9:52

Il faut aussi tenir compte des liens ancrés:

Code: Tout sélectionner
[url=url]text[/url]


La Chaise sauvage
WRInaute passionné
WRInaute passionné
 
Messages: 691
Inscription: Lun Avr 11, 2005 10:37

Message le Jeu Fév 08, 2007 10:04

une deuxième solution, qui corrige certains des bugs que je viens de relever (mais pas le point évoqué par hawkeye)

par contre là c'est sûr, il y a de la place pour optimiser (les regex, c'est pas trop mon point fort...) je vais aller vaquer à mes occupations... et je le laisse à titre d'exercice pour les suivants

:lol:

Code: Tout sélectionner
function gcvoiron_replace($cherche, $remplace, $chaine, $b='url'){
   $chaine = preg_replace('#\['.$b.'\]#i','['.strtolower($b).']',$chaine);  // passe les balises recherchees en minuscule
   $chaine = preg_replace('#\[\/'.$b.'\]#i','[/'.strtolower($b).']',$chaine);
   $chaine = str_replace('['.$b.']',' ['.$b.']',$chaine);   // rajoute un espace avant
   $chaine = str_replace('[/'.$b.']','[/'.$b.'] ',$chaine);  // et après les balises recherchees
   $flag = TRUE;
   $tab  = explode(' ',$chaine);
   $i    = 0;
   foreach($tab as $mot){
      if($flag){
         if(strpos(strtolower($mot),'['.$b.']') !== FALSE) {
            $flag = FALSE;
         } else {
            $mot = preg_replace('#'.$cherche.'#i',$remplace,$mot);
         }
      }
      if(strpos(strtolower($mot),'[/'.$b.']') !== FALSE) {
         $flag = TRUE;
      }
      $res .= $mot.' ';
      $i++;
   }
   return $res;
}


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Code

  • Analyseur d'entête HTTP
    Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités