[BBCode] preg_replace pour les quote

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [BBCode] preg_replace pour les quote

Re: [BBCode] preg_replace pour les quote

par rimie » 29 août 2013, 10:59

Hmm, ca a l'air complique, je vais chercher des exemples pour l'adapter a mon code

Re: [BBCode] preg_replace pour les quote

par moogli » 29 août 2013, 09:59

Salut,

Va falloir que ton expression régulière soit récursive et un peux plus restrictive ;)
La il y a des chances qu'elle s'arrête au 1er /quote ?

Sur le principe je dirais un preg_replace_callback() et une fonction récursive pour la callback.
Il y a pas mal de script sur le net qui le font tu peux regarder comment c'est boutiqué (phpbb par exemple ;) ).

Pour info ton html est un peu déplorable, utilise une balise p ou div pour le contenu, la tu met du bloc (multiligne donc bloc) dans un span.

Tu peux aussi utiliser une classe ces plutôt que tout ce cas dans le tag html ;)


@+

[BBCode] preg_replace pour les quote

par rimie » 29 août 2013, 09:04

Bonjour,

J'ai fait un petit script des BBCodes, le message est sous cette forme, une personne envoi un message, la 2eme personne repond avec des quotes, la premiere personne le faisait aussi, ce qui donne:

Code : Tout sélectionner

[quote] [quote]Premier message[/quote] Reponse au premier message [/quote] 2eme message
le code PHP marche bien avec un seul quote:
public final function bbcode()
{
	
	   $tags = array(
	   '\[b\](.*?)\[\/b\]' => '<strong>$1</strong>',


	// autres tags

	   '\[quote\](.*?)\[\/quote\]' => '<blockquote>
	   <span style="background-color: #e1e4f2; width: auto; box-shadow:6px 6px 12px #888; -moz-box-shadow: 6px 6px 12px #888; -webkit-box-shadow: 6px 6px 12px #888; border-radius : 5px 5px 0px 0px; -moz-border-radius: 5px 5px 0px 0px; -webkit-border-radius: 5px 5px 0px 0px; padding: 3px;">
	   <span style="float: right;" align="absmiddle"><img src="quote.png" align="absmiddle"></span>$1</span></blockquote>',
	   
	   ); // closed array 
 	  
 	  
 	  $this->tags = $tags;
 	     
 	     
	      foreach($this->tags as $k=>$v)
	   {
	  		$this->text = preg_replace('/'.$k.'/', $v , $this->text);  		
			

	   }
	   
}
comment faire afin d'avoir un resultat par exemple:
premier message
============
reponse au premier message
2eme message

ca veut dire si plus qu'une quote, on peut les regrouper sous une seule et mettre une ligne entre les 2

merci a vous