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 :

ne pas convertir certaines balises bbcode


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 20
    Points
    20
    Par défaut ne pas convertir certaines balises bbcode
    Bonjour, j'aimerais savoir comment empêcher de convertir les balises html et bbcode qui se trouvent entre les balises [ code ]..[ /code ].

    Ma fonction :
    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
    22
    23
    24
    25
    <?php
    function BBtags($t) {
    	$t = preg_replace("!\[(/?[bius])\]!mi","<$1>",$t);
    	$t = preg_replace("!\[url\](.+)\[/url\]!Ui","<a href=\"$1\" target=\"_blank\">$1</a>",$t);
    	$t = preg_replace("!\[mail\](.+)\[/mail\]!Ui","<a href=\"mailto:$1\" target=\"_blank\">$1</a>",$t);
    	$t = preg_replace("!\[url=([^\]]+)\](.+)\[/url\]!Ui","<a href=\"$1\" target=\"_blank\">$2</a>",$t);
    	$t = preg_replace("!\[img\](.+)\[/img\]!Ui","<img src=\"$1\" alt=\"\" border=\"0\">",$t);
    	$t = preg_replace("!\[color=([^\]]+)\]!mi","<font style=\"color: $1;\">",$t);
    	$t = preg_replace("!\[size=([^\]]+)\]!mi","<font style=\"font-size: $1px;\">",$t);
    	$t = preg_replace("!\[/(?:color|size)\]!i","</font>",$t);
    	$t = preg_replace("!\[list\](.+)\[/list\]!Umis","<ul type=\"square\">$1</ul>",$t);
    	$t = preg_replace("!\[li\](.+)\[/li\]!Umis","<li>$1</li>",$t);
    	$t = preg_replace("!\[center\](.+)\[/center\]!Umis","<div style=\"text-align:center\">$1</div>",$t);
    	$t = preg_replace("!\[left\](.+)\[/left\]!Ui","<div style=\"text-align:left\">$1</div>",$t);
    	$t = preg_replace("!\[right\](.+)\[/right\]!Ui","<div style=\"text-align:right\">$1</div>",$t);
    	$t = str_replace("[float=right]", "<div style=\"float:right;margin:10px;\">", $t);
    	$t = str_replace("[float=left]", "<div style=\"float:left;margin:10px;\">", $t);
    	$t = str_replace("[/float]", "</div>", $t);
    	$t = preg_replace("!\[quote=([^\]]+)\](.+)\[/quote\]!Ui","<table class=\"bb_quote_table\"><tr><td>&nbsp&nbsp<b>Citation : $1</b></td></tr><tr><td class=\"bb_quote_text\">$2</td></tr></table>",$t);
    	$t = preg_replace("!\[code\](.+)\[/code\]!Umis","<table class=\"bb_code_table\"><tr><td>&nbsp&nbsp<b>Code :</b></td></tr><tr><td class=\"bb_code_text\">$1</td></tr></table>",$t);
    	$t = str_replace("\n","<br />",$t);
    	$t = str_replace("\t","	",$t);
    	return $t;
    }
    ?>
    Merci d'avance de votre réponse.

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    J'ai bien une solution, mais impropre ...
    Supprime la partie contenue entre [code ] et [/code ], puis fait les modifications, et remet le contenu ensuite ...

    sinon, il faudrait rajouter des trucs dans le genre (^\[code\]).*? .*?(^\[/code\]), mais je sais pas si ça marcherais ...
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Hmmm y aurait il un exemple car je ne vois pas du tout comment faire

  4. #4
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Points : 225
    Points
    225
    Par défaut
    ben
    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
     
    $arr = Array();
    preg_match( '#\[code\](.*?)\[\/code\]#i', $t, $arr );
    unset( $arr[ 0 ] );
    $i = 0;
    $code = Array( );
    while( $i = strpos( $t, '[ code]', $i ) ){ // y'a un ' ' en trop ici, c'fais exprès
      $code[] = $i;
    }
    $t = preg_replace( '#\[code\](.*?)\[\/code\]#i', '',$t );
    $i = 0;
    foreach( $arr As $key => $el ){
      $ret .= substr( $t, $i, $code[$key-1]-$i) . $el;
      $i = $code[ $key -1 ];
    }
    Voila, ce code est totalement moche, surement plein d'erreurs, de bugs, et il fait surement rien de bon, mais c'est la seule idée que j'ai, désolé.

    Bonne chance :/
    LoveAngel :: Meow( );
    Personne ne remarque ce qui marche trop bien. Procrastination, Terry Pratchett

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Hmm il ne renvoi aucun texte c'est normale ?

    J'ai fait par exemple :

    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
    22
    23
    24
    <?php
    function BBtags($t) {
    	$arr = Array();
    	preg_match( '#\[code\](.*?)\[\/code\]#i', $t, $arr );
    	unset( $arr[ 0 ] );
    	$i = 0;
    	$code = Array( );
    	while( $i = strpos( $t, '[ code]', $i ) ){ // y'a un ' ' en trop ici, c'fais exprès
    	  $code[] = $i;
    	}
    	$t = preg_replace( '#\[code\](.*?)\[\/code\]#i', '',$t );
    	$i = 0;
    	foreach( $arr As $key => $el ){
    	  $ret .= substr( $t, $i, $code[$key-1]-$i) . $el;
    	  $i = $code[ $key -1 ];
    	}
    }
     
    echo BBtags('Du texte
    [ code ][ b ]du code un saut de ligne[ /b ][ /code ]
    Du texte Du texte
    [ code ]un bloc avec un saut de ligne[ /code ]
    Encore du texte.');
    ?>
    (Les espaces des balises est fait exprès pour pouvoir poster sur le forum)

Discussions similaires

  1. [XSLT] Filtrer certaines balises d'un fichier XML
    Par arthix dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 07/07/2006, 12h21
  2. [XSL] Sélectionner les éléments qui n'ont pas un certain fils
    Par lebechen dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 05/07/2006, 17h54
  3. Popup ne s'ouvre pas sur certain PC
    Par Nicos77 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/11/2005, 16h32
  4. [RegEx] pour retrouver et remplacer certaines balises
    Par Floréal dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2005, 07h03

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