Chaine avec paramètre à remplacer mais problème [Résolu]

Signaler
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008
-
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008
-
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

Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"
Messages postés
56
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
22 janvier 2008

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 ]
Messages postés
56
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
22 janvier 2008

Fais-voir ton code qu'on l'adapte ensemble.
Messages postés
56
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
22 janvier 2008

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 ]
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008

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
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
"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.
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008

bon, j'ai testé, et apparemment tout est bon, donc un très grand merci.