Chaine avec paramètre à remplacer mais problème

Résolu
Gwinyam Messages postés 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 2 janvier 2008 - 15 août 2006 à 16:07
Gwinyam Messages postés 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 2 janvier 2008 - 17 août 2006 à 11:18
Salut,

Je m'explique:
L'idée est de permettre un utilisateur d'appeller des fonctions php dans le contenu des articles pour un projet de CMS. Ces fonctions sont tirées d'une librairie (ou bibliothèque) créée pour la gestion du contenu. Le problème c'est que j'ai des paramètre à passer.

Exemple:
un contenu tel que je souhaite qu'il soit tapé par l'utilisateur "abcde::disp_profil(52)::fghi"
Donc l'idée est de faire appel à une fonction php qui remplacera "::disp_profil(52)::" par ce que retournera la fonction php disp-profil, avec l'argument 52, argument qui peut varier de taille selon le besoin. Et c'est là que je suis paumé...

Je pense que les expressions rationelles/régulières sont dans la solution, mais je ne vois pas comment composer le tout...

Vous auriez pas un petit coup de main en stock à me filer?
svp

Merci d'avance

7 réponses

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
16 août 2006 à 08:05
Salut!
Voici ce que j'ai fait:
function disp_profil( $n )
{
    return ( $n[1] * 2 );
}
// --> le nombre à traité est dans $n[1];

// chaîne de test
$text = 'abcde::disp_profil(52)::fghidfs::disp_profil(5)::';

// à la place de disp_profil, tu dois avoir le nom de ta fonction à 1 paramètre
$text = preg_replace_callback( '/::disp_profil\(([0-9]+)\)::/', 'disp_profil', $text );

echo $text me renvoie: abcde104fghidfs10
ce qui est juste...

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
3
mentral Messages postés 56 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 22 janvier 2008
16 août 2006 à 05:15
Slt

En gros tu veux aboutir à ce que donnerait "abcde<?php echo disp_profil(52); ?>fghi" sans permettre à l'utilisateur d'employer directement le php durant la saisie de son article (trop risqué) et en marquant l'appel de la fonction php par ::, c'est ça ?

[ Mentral ]
0
mentral Messages postés 56 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 22 janvier 2008
16 août 2006 à 05:58
Fais-voir ton code qu'on l'adapte ensemble.
0
mentral Messages postés 56 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 22 janvier 2008
16 août 2006 à 09:35
Est-il possible de généraliser ta fonction à d'autres fonctions que "disp_profil" ?

L'expression régulière deviendrait par exemple : /::[a-zA-Z0-9_-]+\(([0-9]+)\)::/

Par contre je me demande s'il est vraiment possible de récupérer le nom de ladite fonction par la suite pour l'entrer dans preg_replace_callback.

Une idée ?




[ MentraL ]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gwinyam Messages postés 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 2 janvier 2008
16 août 2006 à 12:49
ouah, vous répondez très vite, ça fait plaisir :)

Bon bah je vais tester ça et je vous tiens au courant

Mentral, à qui t'adresses tu?
si c'est pour moi, je pense que l'idée générale de la solution va servir plusieurs fois
merci en tout cas
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 août 2006 à 20:51
"Par contre je me demande s'il est vraiment possible de récupérer le nom de ladite fonction par la suite pour l'entrer dans preg_replace_callback."
Via un create_function en utilisant comme argument la chaine de la fonction à utiliser et de faire un return dessus.
0
Gwinyam Messages postés 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 2 janvier 2008
17 août 2006 à 11:18
bon, j'ai testé, et apparemment tout est bon, donc un très grand merci.
0
Rejoignez-nous