Encore un problème avec preg_replace_callback

Mammouth du PHP | 1668 Messages

26 juin 2008, 18:45

Bonjour à toutes et tous,

Voilà, j'aimerais remplacé :user: d'une partie html, j'ai donc pensé à ça :
<?php
// Fonction qui va parser le modèle
function parse($contenu){
	return preg_replace_callback("#:[a-zA-Z0-9]+:#i", 'cherche_variable', $contenu);
}
// Fonction qui va remplacer les variables trouvés
function cherche_variable($matches){
	global $liste_variables;
	return $liste_variables[$matches[1]];
}

$liste_variables=array();
$liste_variables['user']="katagoto";

ob_start("parse");
?>
<html>
<body>
<p>Bien joué :user:</p>
</body>
</html>
<?php
ob_end_flush();
?>
ça viendrait d'une de mes fonctions, mais je ne vois pas où...

Par avance merci de vos réponses...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 185 Messages

26 juin 2008, 18:58

T'as pas de parenthèses capturante, il ne risque pas d'y avoir quelque chose dans $matches[1] :)

De plus, dans la fonction de callback, je te conseille de vérifier que la clé existe bien avant de faire return, comme ça si elle n'existe pas, tu peux faire un return $matches[0] (la chaîne originale).

Mammouth du PHP | 1668 Messages

26 juin 2008, 19:02

Oui, j'y pensais, mais pour pas allourdir le script :
function cherche_variable($matches){
	global $liste_variables;
	if (array_key_exists($matches[1], $liste_variables)) return $liste_variables[$matches[1]];
	else diie ("la variable <b>".$matches[1]."</b> n'est pas définie");
}
Voilà le code final :
<?php
// Fonction qui va parser le modèle
function parse($contenu){
	return preg_replace_callback("#:([a-zA-Z0-9]+):#i", 'cherche_variable', $contenu);
}
// Fonction qui va remplacer les variables trouvés
function cherche_variable($matches){
	global $liste_variables;
	if (array_key_exists($matches[1], $liste_variables)) return $liste_variables[$matches[1]];
	else diie ("la variable <b>".$matches[1]."</b> n'est pas définie");
}

$liste_variables=array();
$liste_variables['user']="katagoto";

ob_start("parse");
?>
<html>
<body>
<p>Bien joué :user:</p>
</body>
</html>
<?php
ob_end_flush();
?>
Et ça marche niquel ;)
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol