IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

probléme avec preg_replace_callback [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 15
    Points
    15
    Par défaut probléme avec preg_replace_callback
    Salut tous le monde,

    Je vous explique ce que je souhaite faire.

    Je souhaite déterminer le nombre de clique sur chaque lien d'une pahe HTML.
    Pour ce faire je dois analyser le code HTML de la dite page, enregistrer chaque lien en base de donné et remplacer chaque lien par un lien tagué.

    Je ne suis pas sur d'avoir bien compris le fonctionnement de la fonction preg_replace_callback mais j'ai écris le code suivant qui normalement m'aurait permis de faire ce que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public function url_save($matches){
    		//on extrait le tableau de session
        	$sessArray=httpvars::Session('options');
     
    		$mes_id=$sessArray['mes_id'];
     
    		//on enregistre le lien dans une table
    		$link=new t_link_stat_lin();
    		$link->mes_id=$mes_id;
    		$link->lin_url=$matches[$i];
    		$link->Save();
     
    		$lin_id=$link->lin_id;
     
    		//on retourne le nouveau lien
    		return WEBSITEROOT.'consult/linkClick/'.$lin_id;
    	}
     
    	public function urlTag(){
    		$news=new t_newsletter_new();
    		$news->Load('new_id=3');		
    		$codecomplet=$news->new_code;
     
    		echo preg_replace_callback('|([^\s"\']*://[^\s"\']*)|',"$this->url_save",$codecomplet);
    	}
    Le problème est que cela ne marche pas et lorsque je lance la fonction urltag, j'ai une exception : ": preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '', to be a valid callback "

    Voila je vous remercie d'avance pour votre aide

    A+

  2. #2
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    re,
    je n'ai jamais utiliser cette fonction mais si tu remplaces "$this->url_save" par "url_save", ça donne quoi ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Mitaka Voir le message
    re,
    je n'ai jamais utiliser cette fonction mais si tu remplaces "$this->url_save" par "url_save", ça donne quoi ?
    c'est ce que j'avais essayer au départ et cela me donnait la même erreur :

    preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'url_save', to be a valid callback

  4. #4
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    et en utilisant la fonction call_user_func(array($this, 'url_save')) ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Mitaka Voir le message
    et en utilisant la fonction call_user_func(array($this, 'url_save')) ?
    Je sais pas si j'ai bien compris ce que tu m'a demandé de testé mais voila ce que j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_replace_callback('|([^\s"\']*://[^\s"\']*)|',"call_user_func(array($this, 'url_save'))",$codecomplet);
    et j'obtiens l'erreur suivante :
    "Object of class test could not be converted to string"

  6. #6
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_replace_callback('|([^\s"\']*://[^\s"\']*)|',call_user_func(array($this, 'url_save')),$codecomplet);

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Re,

    je viens de tester ta derniére proposition et voila l'erreur :

    "Missing argument 1 for test::url_save()".

    Ceci dit ne t'embéte plus car je viens de trouver la solution, par hasard, sur un forum anglais, et ça marche nickel chrome :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_replace_callback('|([^\s"\']*://[^\s"\']*)|',array(get_class($this), 'url_save'),$codecomplet))
    Le secret apparement est dans le le tableau : array(get_class($this), 'url_save')
    Je ne comprends pas trop ce que fait exactement cette syntaxe, mais c'est bon à savoir !

    Cependant j'ai un autre problème, moins prise de tête à résoudre.
    Je me rend compte que ma regex n'est pas terrible, car elle prend tous les liens même le lien dans le doctype et c'est pas rigoureux du tout ...
    ce que je voudrais c'est modifié ma regex de façon à ce que le regex prenne les liens associé à un href.
    par exemple lorsqu'il rencontre un code comme ça:
    href="http://www.legrandtarbes.fr/gp/Covoiturage/140/0", il sorte http://www.legrandtarbes.fr/gp/Covoiturage/140/0

    voili vloia, donc si tu as une idée ...

  8. #8
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    la fonctionnalité recherche du site peut t'aider :
    http://www.developpez.net/forums/d91...e-lien-chaine/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Problème avec preg_replace_callback
    Par Electroniktor dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2008, 23h03
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo