Encore un problème avec preg_replace_callback

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 : Encore un problème avec preg_replace_callback

par katagoto » 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 ;)

par savageman » 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).

Encore un problème avec preg_replace_callback

par katagoto » 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...