Repetition d'un mot

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 : Repetition d'un mot

Re: Repetition d'un mot

par rimie » 08 avr. 2012, 08:57

oui merci xTG, je l'ai renommer apres le foreach()

Re: Repetition d'un mot

par xTG » 08 avr. 2012, 08:35

C'est normal.
foreach($array as $val)
  $b = $val;
Quelle est la valeur de $b à la fin ? La dernière valeur de $array.
Comme dit précédemment tu as modifié le fonctionnement du script avec tes renommages n'importe comment.
Tu as effectué des traitements mais tu ne gardes que le dernier en mémoire à cause de cela.

Re: Repetition d'un mot

par rimie » 08 avr. 2012, 07:14

Bah oui et regardes dans la boucle après les différentes variables que tu utilises...
donc je peux pas renomer au sein d'une boucle?

Re: Repetition d'un mot

par xTG » 07 avr. 2012, 11:56

Bah oui et regardes dans la boucle après les différentes variables que tu utilises...

Re: Repetition d'un mot

par rimie » 07 avr. 2012, 09:03

text != newtext
Donc non ce n'est absolument pas un copier/coller de fonction que tu nous as fait pour le passage POO.
j'ai renomme $this->text a $this->newText

Re: Repetition d'un mot

par xTG » 07 avr. 2012, 08:19

text != newtext
Donc non ce n'est absolument pas un copier/coller de fonction que tu nous as fait pour le passage POO.

Re: Repetition d'un mot

par rimie » 07 avr. 2012, 07:53

voila la fonction:
<?php
function bbcode($text)
{
	
	   $tags = array(
	   	'\[b\](.*?)\[\/b\]' => '<strong>$1</strong>',
	   	'\[i\](.*?)\[\/i\]' => '<em>$1</em>',
	   	'\[u\](.*?)\[\/u\]' => '<u>$1</u>',
	   	
	   ); // closed array 
 	  
 	     
	   foreach($tags as $k=>$v)
	   {
	  		$text = preg_replace('/'.$k.'/', $v , $text);
	   }
	   
	   return($text);
} // end function


?>
et voila la class:
<?php

final class BBCode {

public final function __construct($text) {
		
		$this->text = $text;
		
		$allowedTags = array(
		'[b]' => '[/b]',
		'[i]' => '[/i]',
		'[u]' => '[/u]',
		'[s]' => '[/s]',
		
		);
		
		$this->allowedTags = $allowedTags;
		
		}
		
		
public final function bbcode()
{
	
	   $tags = array(
	   '\[b\](.*?)\[\/b\]' => '<strong>$1</strong>',
	   '\[i\](.*?)\[\/i\]' => '<em>$1</em>',
	   '\[u\](.*?)\[\/u\]' => '<u>$1</u>',
	   '\[s\](.*?)\[\/s\]' => '<s>$1</s>',
	   
	   ); // closed array 
 	  
 	  
 	  $this->tags = $tags;
 	     
 	     
	   foreach($this->tags as $k=>$v)
	   {
	  		$this->newText = preg_replace('/'.$k.'/', $v , $this->text);
	   }
	   
	   return($this->newText);
} // end function


} // end class


$f = new BBCode('Ceci est un [b]test GRAS[/b] et bien [u]souligne[/u], et ceci est un autre [b]test gras[/b] et voila [i]italic[/i][/b][/i][u]<br />');

echo $f->bbcode();
?>
merci

Re: Repetition d'un mot

par rimie » 06 avr. 2012, 08:05

c'est la meme chose, sauf que je fais ca, du texte au __construct:
__construct($text)

function bbcode()
et dans la fonction je delcare durectement le texte dans la fonction

Re: Repetition d'un mot

par xTG » 06 avr. 2012, 07:02

J'en doute fortement si tu utilises les mêmes variables.
Donc compares les deux pour trouver ton erreur, ou bien relis bien mon message pour bien le comprendre...

Re: Repetition d'un mot

par rimie » 06 avr. 2012, 06:14

C'est un problème d'écrasement de variable.
oui, c'est vrai, mais dans une fonction simple, sans class, ca marche bien

Re: Repetition d'un mot

par xTG » 05 avr. 2012, 18:20

je comprends pas, je parle des balises BBCode, pourquoi un seul qui est pris en consideration soit bold, italic ou souligne, alors que dans une fonction simple ca marche
Tu as zappé mon message il semblerait...
C'est un problème d'écrasement de variable.

Imagines un panier contenant des objets de type 1, 2 et 3.
Ton script remplace les 1 par des 4, les 2 par des 5, ect.
Ce que fait ton script actuel ? Il remplace les types 1 par les types 4.
Puis il reprend le panier d'origine et remplace les type 2 par les types 5, ect...
Donc au final on retrouve des types 1, 2 et 6.

Re: Repetition d'un mot

par rimie » 05 avr. 2012, 14:15

je comprends pas, je parle des balises BBCode, pourquoi un seul qui est pris en consideration soit bold, italic ou souligne, alors que dans une fonction simple ca marche

Re: Repetition d'un mot

par sirakawa » 05 avr. 2012, 09:11

sous unix, il y a bison (linux de yacc) et flex qui font ce type d'analyse, mais il faut écrire une grammaire sous forme d'expressions réguliéres
http://flex.sourceforge.net

Re: Repetition d'un mot

par rimie » 05 avr. 2012, 04:22

oui c'est vrai, comment resoudre en primo le probleme qu'un seul parametre est pris en consideration

Re: Repetition d'un mot

par sirakawa » 04 avr. 2012, 16:37

De toute façon, cette forme d'analyse est mal conçue comme je vais le prouver:
c'est censé être gras puis maigre puis gras puis normal

Code : Tout sélectionner

c'est censé être [b]gras puis maigre puis [b]gras[/b][/b] puis normal
Il faut se pencher sur les moteurs d'analyse syntaxique pour espérer une approche saine du problème.
Il ne suffit pas de compter si on a le même nombre d'ouvrants et de fermants pour que le problème soit résolu:
((a +b) /c) : deux ( et deux )
n'a pas grand chose à voir avec
(a +(b /c)) : deux ( et deux )
ou a + (b/c) avec (a+b) /c