Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2006, 15h38   #1
Invité de passage
 
Inscription : février 2005
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 64
Points : 4
Points : 4
Par défaut Problème preg_replace

Bonjour,
J'ai suivi le manuel de php.net pour essayer de me faire un petit parser html pour mon site. Cela me permet de remplacer certaines expressions d'un fichier par le resultat d'une fonction.
Le problème c'est que lorsque je passe un objet en parametre de l'execution de la fonction cela ne fonctionne pas. En revanche, si je passe un type primitif, cela fonctionne.

Voici le code correct :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
function parse($fichier) 
{    
// $var est un type primitif String
$var = "chaine";
 
    $fd = fopen( "./tpl/".$fichier, "r");
 
    while ( !feof( $fd ) ) 
    {
        $ligne = fgets( $fd );
   echo preg_replace(
             "/CMD_([a-zA-Z0-9]*)/e",
             "callback('\\1','$var')",
             $ligne);
    }
}
 
function callback($fonction, $var)
{
  return $fonction($var);
}
En revanche si la variable $var est un objet cela ne fonctionne plus...
Auriez vous une solution ?

Merci d'avance.

TOM

ps: j'ai essayé avec preg_replace_callback, mais le problème c'est que je ne peux pas du tout passer de paramètres.
V_R46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 21h12   #2
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Tu veux remplacer par quoi?
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 21h15   #3
Invité de passage
 
Inscription : février 2005
Messages : 64
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 64
Points : 4
Points : 4
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function parse($fichier, $var) 
{    
    $var=serialize($var);
    $fd = fopen( "./tpl/".$fichier, "r");
 
    while ( !feof( $fd ) ) 
    {
        $ligne = fgets( $fd );
   echo preg_replace(
             "/CMD_([a-zA-Z0-9]*)/e",
             "callback('\\1','$var')",
             $ligne);
    }
}
 
function callback($fonction, $var)
{
  $var=unserialize($var);
  return $fonction($var);
}
C'est bon j'ai trouver merci quand meme Anduriel
V_R46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h14.


 
 
 
 
Partenaires

Hébergement Web