Geshi et str_replace

valentin45000
Invité n'ayant pas de compte PHPfrance

30 avr. 2010, 08:56

Bonjour à toutes à tous,
J'ai installer Geshi et mis en place un système ou mes membre peuvent poster.
Maintenant dans chaque post j'aimerais que si un membre écrit :

Code : Tout sélectionner

[code=html]quelque chose[/code=html]
J'aimerais que se soit remplacer par cette fonction :
<?php $source = 'Le message du membre';$language = 'html'; $geshi = new GeSHi($source, $language); echo $geshi->parse_code();?>
Donc j'ai fait :
<<?php include('Geshi/geshi.php'); ?>
<html>
<head></head>
<body>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$id_tutoriel = intval($_GET['id']);
$sql_tutoriel = $bdd->query('SELECT * FROM test WHERE id="'.$id_tutoriel.'" ');
$donnees = $sql_tutoriel->fetch();
$donnees = str_replace("[b]","<b>",$donnees);
$donnees = str_replace("[/b]","</b>",$donnees);
$donnees = str_replace("[code=html]","<?php $source = '",$donnees);
$donnees = str_replace("[/code=html]","';$language = 'html'; $geshi = new GeSHi($source, $language); echo $geshi->parse_code();?>",$donnees);
?>
<div style="background:red; overflow:auto;"><?php echo nl2br($donnees['mess']); 
?></div>
</body>
</html>
Et là, il me dit :
Catchable fatal error: Object of class GeSHi could not be converted to string in C:\wamp\www\SDR\renvoie.php on line 13
Si vous pouvez m'aider ça serais sympa car là je tourne en rond et je n'arrive à rien.

Merci d'avance.
Cordialement.

Mammouth du PHP | 672 Messages

30 avr. 2010, 10:07

Bonjour.

Je n'ai pas Geshi, mais à vue de nez je dirais que le problème vient de l'utilisation des guillemets.

Tu peux vérifier en regardant régulièrement le contenu de $donnees (avec un echo) :
Quand on utilise les guillemets (double quotes), ce qui est à l'intérieur est interprété, par opposition aux quotes simples.

valentin45000
Invité n'ayant pas de compte PHPfrance

30 avr. 2010, 10:35

Bonjour,
Déjà quand on traduit l'erreur ça donne :
L'objet de la classe Geshi ne peut pas être converti en chaine de caractères.
Donc le problème pourrais venir de là, non ? :
$geshi = new GeSHi($source, $language);

valentin45000
Invité n'ayant pas de compte PHPfrance

30 avr. 2010, 10:37

Désolé du double post, mais si il y a une autre solution pour arriver au même résultat je veut bien :)

valentin45000
Invité n'ayant pas de compte PHPfrance

30 avr. 2010, 14:58

Triple post, je bat des records :langue:
Non sèrieusement, j'ai refait le code voici toute les explications :


J'ai installer Geshi.
Et maintenant dans chaque j'aimerais que si un membre écrit :
<codehtml>quelque chose</codehtml>
J'aimerais que ça soit remplacer par les balise de Geshi.
Le problème se situe ligne 28.
Donc j'ai fait :
<?php include('Geshi/geshi.php'); ?>
<html>
<head></head>
<body>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
if (!empty($_GET['id'])){
$id_tutoriel = intval($_GET['id']);
$sql_tutoriel = $bdd->query('SELECT * FROM test WHERE id="'.$id_tutoriel.'" ');
$donnees = $sql_tutoriel->fetch();
function parseZCode($content) {
	// Parsage des balises
	$zcode = array(  
		'`<codehtml>(.+)</codehtml>`isU',
		'`<italique>(.+)</italique>`isU',  
		'`<gras>(.+)</gras>`isU',
		'`<barre>(.+)</barre>`isU',
		'`<lien>(.+)</lien>`isU',
		'`<lien url="(.+)">(.+)</lien>`isU',
		'`<image>(.+)</image>`isU',
		'`<citation>(.+)</citation>`isU',
		'`<citation nom="(.+)">(.+)</citation>`isU',
		'`<citation lien="(.+)">(.+)</citation>`isU',
		'`<taille valeur="(.+)">(.+)</taille>`isU'
	);  
	
	$html = array(  
		'<?php $source = \'$1\';$language = \'php\';$geshi = new GeSHi($source, $language);echo $geshi->parse_code(); ?>',  
		'<em>$1</em>',  
		'<strong>$1</strong>',
		'<del>$1</del>', 
		'<a href="$1">$1</a>',
		'<a href="$1">$2</a>',
		'<img src="$1" alt="Image utilisateur" />',
		'<br /><span class="citation">Citation</span><div class="citation2">$1</div>',
		'<br /><span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<br /><span class="citation"><a href="$1">Citation</a></span><div class="citation2">$2</div>',
		'<span class="$1">$2</span>'
	); 
	
	$content = htmlspecialchars($content);
	$content = preg_replace($zcode, $html, $content);
	
	// parsage des smilies
	$smiliesName = array(':magicien:', ':colere:', ':diable:', ':ange:', ':ninja:', '>_<', ':pirate:', ':zorro:', ':honte:', ':soleil:', ':\'\\(', ':waw:', ':\\)', ':D', ';\\)', ':p', ':lol:', ':euh:', ':\\(', ':o', ':colere2:', 'o_O', '\\^\\^', ':\\-°');
	$smiliesUrl  = array('magicien.png', 'angry.gif', 'diable.png', 'ange.png', 'ninja.png', 'pinch.png', 'pirate.png', 'zorro.png', 'rouge.png', 'soleil.png', 'pleure.png', 'waw.png', 'smile.png', 'heureux.png', 'clin.png', 'langue.png', 'rire.gif', 'unsure.gif', 'triste.png', 'huh.png', 'mechant.png', 'blink.gif', 'hihi.png', 'siffle.png');
	$smiliesPath = "http://www.siteduzero.com/Templates/images/smilies/";
	
	for ($i = 0, $c = count($smiliesName); $i < $c; $i++) {
		$content = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $content);
	}
	
	// Rtours à la ligne
	$content = preg_replace('`\n`isU', '<br />', $content); 
	
	return $content;

}
?>
<div style="overflow:auto;"><?php echo parseZCode($donnees['mess']); 
?></div><?php
}
else{
echo "<b><font color=\"red\">Erreur 404</font></b>";
}?>
</body>
</html>
Mais ça ne me donne pas le bon truc, je vous laisse voir :
<head></head>
<body>
<form method="GET" action="conf.php">
Titre :<br>
<input type="text" name="titre"/><br>
Message:<br>
<textarea name="mess"></textarea><br>
<input type="submit"/>
</form>
</body>
</html>';$language = 'php';$geshi = new GeSHi($source, $language);echo $geshi->parse_code(); ?>
Comprenez vous le problème ?
Merci d'avance.
Cordialement.

ViPHP
ViPHP | 2287 Messages

01 mai 2010, 03:29

Ca va être un peu plus compliqué qu'un str_replace :)

Pourquoi ne pas aller voir directement dans le code source de phpbb3 (ce forum) qui implémente ceci, et reprendre le moteur de bbcode ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

valentin45000
Invité n'ayant pas de compte PHPfrance

02 mai 2010, 00:47

Bonjour,
Pouvez vous m'indiquez, comment le mettre en place s'il vous plait ?

valentin45000
Invité n'ayant pas de compte PHPfrance

02 mai 2010, 03:10

Bonjour,
J'ai résolu mon problème en remplaçant Geshi par SyntaxHighlighter qui s'intègre par des span se qui est donc 100fois plus simple.

Cordialement.