Repetition d'un mot

Mammouth du PHP | 725 Messages

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

ViPHP
xTG
ViPHP | 7331 Messages

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.

Mammouth du PHP | 725 Messages

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

ViPHP
xTG
ViPHP | 7331 Messages

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...

Mammouth du PHP | 725 Messages

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

Mammouth du PHP | 725 Messages

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

ViPHP
xTG
ViPHP | 7331 Messages

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.

Mammouth du PHP | 725 Messages

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

ViPHP
xTG
ViPHP | 7331 Messages

07 avr. 2012, 11:56

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

Mammouth du PHP | 725 Messages

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?

ViPHP
xTG
ViPHP | 7331 Messages

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.

Mammouth du PHP | 725 Messages

08 avr. 2012, 08:57

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