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 :

Remplacement de balise [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Par défaut Remplacement de balise
    Hello,

    j'ai une chaîne qui contient cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="javascript:pop_image('1718','1718','155','239');"><img src="..." /></a>
    il faut que je puisse remplacer tout ce qu'il y a entre guillemet par cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://www.nomdusite.com/bdd/images/1718.jpg" rel="lytebox"><img src="..." /></a>
    en sachant qu'il faut que je récupéré le premier numéro entre parenthèse pour le réintégrer dans la nouvelle ligne.
    Cette chaîne peut être présente plusieurs fois dans un texte issu d'une table.

    pour l'instant j'ai fait cela pour trouver le contenu dans le texte, c'est au niveau du traitement que je bloque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function image($texte){
    	preg_match_all('#<a href="javascript:pop_image(.+?)>#',$texte,$matches);
    	for($i=0;$i<count($matches[0]);$i++){
    //traitement a faire ici pour remplacement
     
    		}
    	}
     
    }
    vous auriez une idée ?

    merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Si le but est de faire du remplacement pourquoi n'utilisez-vous pas la fonction preg_replace directement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $out = preg_replace('~<a href="javascript:pop_image\(\'(\d+)\'.*\);">~U', '<a href="http://www.nomdusite.com/bdd/images/\1.jpg" rel="lytebox">', $in);
    A adapter, si besoin.

  3. #3
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    salut,
    j'ai pensé à ceci, mais il doit y avoir moyen de faire plus élégant pour prévoir des séquences de chiffres plus longues ou plus courtes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function image($texte){
    	preg_match_all('#[[:digit:]]{4}|[[:digit:]]{3}#',$texte,$matches);
    	foreach($matches[0] as $entry){
    		echo '<a href="http://www.nomdusite.com/bdd/images/'.$entry.'.jpg" rel="lytebox"><img src="..." /></a>';
     	}
    }
     
    $texte = "<a href=\"javascript:pop_image('1718','1719','155','239');\"><img src=\"...\" /></a>";
     
    image($texte);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Par défaut
    en effet preg_replace était la solution parfaite

    merci pour les infos

    bonne journée

  5. #5
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    tant mieux si ça fonctionne.
    je reviens quand même sur le code que j'ai posté car en fait je viens de penser qu'il suffit de faire ceci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function image($texte){
    	preg_match_all('#[[:digit:]]{1,4}#',$texte,$matches);
    	foreach($matches[0] as $entry){
    		echo '<a href="http://www.nomdusite.com/bdd/images/'.$entry.'.jpg" rel="lytebox"><img src="..." /></a>';
     	}
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Par défaut
    je vais tester les deux méthodes et voir celle qui consomme le moins de ressources et la plus rapide en exécution (vu le nombre de requête par jour il faut que j'optimise au maximum)

    j'ai un petit souci
    en fait, l'image peut être au format jpg, gif ou png

    du coup si je met jpg ca ne passe pas
    y aurai t il un moyen simple de faire un contrôle si l'image existe dans un format et de mettre la bonne extension dans le regex ?

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Il n'y a qu'à faire ce traitement par une fonction de rappel lors de chaque correspondance (implique l'utilisation de la fonction preg_replace_callback au lieu de preg_replace) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function cb_replace($m) {
        static $extensions = array('jpg', 'gif', 'png');
     
        foreach ($extensions as $ext) {
            if (file_exists($m[1] . '.' . $ext)) { # Adapter le chemin si nécessaire
                return '<a href="http://www.nomdusite.com/bdd/images/' . $m[1] . '.' . $ext . '" rel="lytebox">';
            }
        }
        return $m[0]; # Par défaut, on laisse la chaîne inchangée
    }
     
    $out = preg_replace_callback('~<a href="javascript:pop_image\(\'(\d+)\'.*\);">~U', 'cb_replace', $in);

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 30
    Par défaut
    super

    merci beaucoup , avec cette fonction je vais pouvoir remettre a jour la base

    bon week end

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

Discussions similaires

  1. [RegEx] Remplacer des balises à coups de regex
    Par titouille dans le forum Langage
    Réponses: 7
    Dernier message: 08/04/2009, 09h48
  2. Remplacement de balises par une seule autre
    Par laurent35 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 25/04/2006, 09h48
  3. [RegEx] Remplacement de balise <br /><br /> gen
    Par raddical dans le forum Langage
    Réponses: 5
    Dernier message: 16/03/2006, 22h42
  4. [RegEx] pour retrouver et remplacer certaines balises
    Par Floréal dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2005, 08h03
  5. [Débutante] Remplacer la balise marquee ?
    Par silversky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/09/2005, 18h28

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