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 :

remplacement des chaînes dans un text


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut remplacement des chaînes dans un text
    j'ai une fonction qui remplace des chaines de caractères dans un text avec des images représentants des smileys.
    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 do_smilies($text)
    	{
    		$smiley_text = array(':aie:',':ccool:',':D','8-)',':(',':lol:',':mrgreen:',':P',':oops:',';)',':king:',':mouarf:');
    		$dir  = "\LIB\smiley";
    		$smiley_img = scandir($dir);
    		array_splice($smiley_img, 0,2);
    		$text = ' '.$text.' ';
    		$num_smilies = count($smiley_text);
    		for ($i = 0; $i < $num_smilies; ++$i)
    			$text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="/FORUM/LIB/smiley/'.$smiley_img[$i].'" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);
     
    		return substr($text, 1, -1);
    	}
    tout marche nickel, sauf quand je place mon smiley juste après du texte sans espace, ici l'image ne sera pas affichée mais c'est le texte du smiley qui sera affiché.

    exemple:
    avec espace :
    mon texte
    sans espace:
    j'ai essayé de faire des modifications dans la formule preg_replace mais en vein

  2. #2
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Je pense que le souci c'est que t'as regExp ne prend pas les caractères [a-z][0-9], donc du coup , quand s'il n'y a pas d'espace elle ne marche pas.

    \W : tout caractère saut lettre [a-z] [A-Z], lettre accentuée, chiffre [0-9] et '_'.

  3. #3
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    \W : tout caractère saut lettre [a-z] [A-Z], lettre accentuée, chiffre [0-9] et '_'.
    tu veux dire : .. sauf lettre ..

    si oui, que dois-je faire pour qu'il prend en considération les lettres et les chiffres ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    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 do_smilies($text)
    	{
    		$smiley_text = array(':aie:',':ccool:',':D','8-)',':(',':lol:',':mrgreen:',':P',':oops:',';)',':king:',':mouarf:');
    		$dir  = "\LIB\smiley";
    		$smiley_img = scandir($dir);
    		array_splice($smiley_img, 0,2);
    		$text = ' '.$text.' ';
    		$num_smilies = count($smiley_text);
    		for ($i = 0; $i < $num_smilies; ++$i)
    			$text = str_replace($smiley_text[$i], '<img src="/FORUM/LIB/smiley/'.$smiley_img[$i].'" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />', $text);
     
    		return substr($text, 1, -1);
    	}
    essaye comme ça en plus ça devrait être plus rapide qu'une regex.

  5. #5
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    ouaooh, ca marche
    merci than


    chaio

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/10/2014, 01h58
  2. [Batch] Remplacer des caractères dans un fichier texte
    Par Benoit Labbey dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 09/06/2009, 16h43
  3. Remplacer des motifs dans une chaîne
    Par tonguim dans le forum Langage
    Réponses: 1
    Dernier message: 30/05/2009, 17h49
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37

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