IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec str_replace


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité(e)
    Invité(e)
    Par défaut Problème avec str_replace
    Bonjour,

    j' ai un problème avec la fonction str_replace elle fonctionne bien sauf quand j'ai le même mot au pluriel sa me remplace même mon title (il et alors afficher a l'écran) et du coup cela case mon lien

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function modifier_motcles($phrase) {
     
    $motCles = array('toast', 'toasts');
     
      $newMotCles = array
    ('<a href="http://www.google.com/" title="toast">toast</a>',
    '<a href="http://www.google.com/" title="toasts">toasts</a>');
     
    	$newphrase = str_replace($motCles, $newMotCles, $phrase);
     
     
    	return $newphrase;
    	}
    Merci pour vos réponses.
    Dernière modification par Deepin ; 08/10/2010 à 08h53. Motif: merci d'utiliser la balise code (bouton # de l'editeur)!!

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Par défaut
    Chez moi cette fonctionne la fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function remplacer_Mots_Clefs($phrase) 
    {
    	$motsClefs = array('toast','toasts');
    	$motsRemplacants = array
    	('<a href="http://www.google.com/" title="toast">toast</a>',
    	'<a href="http://www.google.com/" title="toasts">toasts</a>');
    	$compteur = 0;
    	foreach ($motsClefs as $valeur)
    	{
    		$phrase = str_replace($motsClefs[$compteur], $motsRemplacants[$compteur], $phrase);
    		$compteur++;
    	}
    	return $phrase;
    }
    Un petit conseil, nomme tes variables plus explicitement, sinon tu vas t'arracher les cheveux lors de la relecture du code :/

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    sa ne fonctionne pas

    merci quand même et ton compteur je vois pas l'intérêt?

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Par défaut
    Pour chaque paire de valeur motClef / motRemplacant je fais un tour de boucle dans lequel je vérifie la présence de mots à remplacer.
    Compteur permet de naviguer dans les tableaux pour remplacer les bonnes valeurs

    Chez moi ca fonctionne, mais je présume que tu n'utilise pas les même phrases que moi pour tester, tu pourrais me donner des exemples d'utilisation de ta fonction?

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Oui j'ai compris au final mes sa ne fonctionne toujours pas il ya que toast qui et pris en compte et le s non voici mon code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function smarty_modifier_motcles($phrase) 
    {
    	$motCles = array('toast','toasts');
    	$newMotCles = array
    	('<a href="http://www.google.com/" title="toast">toast</a>',
    	'<a href="http://www.google.com/" title="toasts">toasts</a>');
     
    	$compteur = 0;
    	foreach ($motCles as $valeur)
    	{
    		$phrase = str_replace($motCles[$compteur], $newMotCles[$compteur], $phrase);
    		$compteur++;
    	}
    	return $phrase;
    }
    Dernière modification par Deepin ; 08/10/2010 à 08h54. Motif: merci d'utiliser la balise code (bouton # de l'editeur)!!

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Par défaut
    En fait j'aurais aimé avoir la valeur de ta variable phrase lors de l'appel de ta fonction.


    Le soucis peut venir du fait que, lorsque tu appelles ta fonction, elle remplace les mots clefs tours à tour. ta fonction remplacera le mot toast correctement, mais elle remplacera également le toast de <toast>er, ou de <toast>s.

    Tu peux également avoir le soucis d'un remplacement récursif, dans un premier temps, tu remplace toast par ton lien, mais lors de la vérification du second mot clef, tu risque de remplacer des choses parmi ce que tu as déjà remplacé. (j'espère que tu me suis... :p)
    Ordre de remplacement

    A cause du fait que la fonction str_replace() effectue les remplacements de la gauche vers la droite, elle peut remplacer une valeur précédemment insérée lors de multiples remplacements.
    (php.net)

    Cela fait donc deux choses à gérer...


    Une idée pour palier à cela : Faire un premier remplacement en générant un "mot unique" aléatoire (un md5 du mot remplacant ou du mot clef), et de faire une seconde serie de remplacement afin de remplacer ces md5 par les valeurs de remplacements...


    Quelque chose du genre (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function remplacer_Mots_Clefs($phrase) 
    {
        $motsClefs = array('toast','toasts');
        $md5MotsClefs = array(md5('toast'),md5('toasts'));
        $motsRemplacants = array
        ('<a href="http://www.google.com/" title="toast">toast</a>',
        '<a href="http://www.google.com/" title="toasts">toasts</a>');
        $compteur = 0;
        foreach ($motsClefs as $valeur)
        {
            $phrase = str_replace($motsClefs[$compteur], $md5MotsClefs[$compteur], $phrase);
            $compteur++;
        }
    $compteur = 0;
        foreach ($md5MotsClefs as $valeur)
        {
            $phrase = str_replace($md5MotsClefs[$compteur], $motsRemplacants[$compteur], $phrase);
            $compteur++;
        }
        return $phrase;
    }

    Edit : réinitialise le compteur avant la seconde boucle sinon ca marchera pas

  7. #7
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    Citation Envoyé par Aloneghost Voir le message
    Pour chaque paire de valeur motClef / motRemplacant je fais un tour de boucle dans lequel je vérifie la présence de mots à remplacer.
    Compteur permet de naviguer dans les tableaux pour remplacer les bonnes valeurs
    c'est inutile str_replace gere très bien les tableaux, du coup bye bye la boucle.

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    c'est normale, comment veuxx tu faire la difference entre changer toast et toast dur
    il va falloir faire une exception sur tout le reste, mais ca deviens compliquer, c'est pour faire quoi dans le fond ?
    des mots clés sur mon site ,
    Comment faire l'exception?
    Dernière modification par Deepin ; 18/10/2010 à 09h13. Motif: Merci d'utiliser la balise citation

Discussions similaires

  1. [PHP 5.2] Problème avec str_replace
    Par daquad dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2009, 15h56
  2. Réponses: 3
    Dernier message: 12/01/2008, 23h16
  3. [Tableaux] problème avec str_replace en boucle
    Par kev2259 dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2007, 16h46
  4. Problème avec str_replace()
    Par vinche999 dans le forum Langage
    Réponses: 6
    Dernier message: 13/02/2006, 09h23
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo