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 :

Utilisation de preg_match_all [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut Utilisation de preg_match_all
    Bonjour,
    je ne suis pas du tout doué pour l'emploi de preg_match_all aussi, je vous saurai gré de me donner un petit coup de main.

    Je cherche à identifier, pour les remplacer, dans une chaine html toutes les chaines de type
    <img src='data:image/xxx;base64,yyyyyyyyyyy...yyyyyyyyyyy'/>
    quel que soit xxx (png, gif, bmp) etc pour ensuite pouvoir remplacer les chaines de caractères "data:image/xxx;base64," et "yyyyyyyyyyy...yyyyyyyyyyy'>" de contenu et de longueur variable par
    "src='cid:fc69bd47fc891f7be4d23b9db25348d0localhost'" et pouvoir traiter la chaine "yyyyyyyyyyy...yyyyyyyyyyy" déjà codée en base64 dans mon envoi de courriel
    Cordialement,
    Christophe Charron

  2. #2
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    vu que c'est pour remplacer, preg_replace serait peut etre plus ce que tu recherche.

    Vite fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<img src='data:image/(?:png|gif|bmp);base64,([A-Za-z0-9+/=]+?)'/>#

  3. #3
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Ben non parce qu'il faut que je conserve de contenu de mes chaines "yyyyyyyyyyy...yyyyyyyyyyy" pour les poser en fin de mon courriel
    Cordialement,
    Christophe Charron

  4. #4
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    oui mais si tu as besoin de remplacer, preg_replace est le mieux placé ^^
    Tu peux par contre bidouiller un peu. Je m'explique avec un exemple :

    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
    <?php
     
    // Le texte contenant les balises à capturer et remplacer
    $texte = '';
     
    // Code en Base64 que tu recupere
    $image_base64=array();
     
    function replace_image($match)
    {
        global $image_base64;
     
        $image_base64[] = $match[1];
     
        return "<img src='cid:fc69bd47fc891f7be4d23b9db25348d0localhost'/>";
    }
     
    $texte = preg_replace_callback("#<img src='data:image/(?:png|gif|bmp);base64,([A-Za-z0-9+/=]+?)'/>#", 'replace_image', $texte);
     
    print_r($image_base64);
     
    var_dump($texte);
     
    ?>

  5. #5
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Bonsoir et merci pour ton aide.
    Entre temps, j'avais un peu progressé, c'est à dire que j'arrive à isoler ma chaine
    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
    27
    28
    29
    30
    31
    32
    <?php
    $html = <<<EOT
    <html>
      <head>
        <title>Base64</title>
      </head>
      <body>
        <div >
          Ma tortue : <br />
          <img src="data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABgf/xAAlEAACAQMDAwUBAAAAAAAAAAABAgQDBREGEiEAMUEHExUiYTL/xAAVAQEBAAAAAAAAAAAAAAAAAAADBP/EABoRAQACAwEAAAAAAAAAAAAAAAEAIQIDEhP/2gAMAwEAAhEDEQA/AEFw9T51unzLtVrq1tiyacdraoolmRh9mDBt+9T3BwPGPIQ6R9W9P6rlCEfct812ApUpBGKue21hxn8OM+M9SLW+jbp85da9n0tdFtgktGoqiMxLAAllUDPt5OVPI/R2B2zaC1FdLlMhLDqU5sJaVRow+tU72AAz/Kd8kk5HPB5HU2v1FMruD1n2gVP/2Q=="/>
        </div><br />
      </body>
    </html>
    EOT;
        $motif='@src="data:image/png;base64,([[:print:]]+)"@im';
        preg_match_all($motif,$html,$preg_res);
        $file[0] = array();
        foreach( $preg_res[1] as $base64 ) {
          if(!in_array($base64,$file[0])) {
            $id=md5(uniqid(rand())).$_SERVER['SERVER_NAME'];
            $file[0][$base64]=$id;
            $file[1][$base64]='@(src="data:image/png;base64,'.$base64.'")@im';    //  C'est pas bon !!
            $file[2][$base64]='src="cid:'.$ID.'"';
            echo $base64.'<br/>';
            echo $file[1][$base64].'<br/>';
            echo $file[2][$base64].'<br/>';
          }
        }
        unset($preg_res);
        $html=preg_replace($file[1],$file[2],$html);
    echo $html;
    ?>
    Mais comme ma variable $base64 contient des /+= le remplacement ne se fait pas !!
    Je pense que c'est le dernier point à élucider !!
    Cordialement,
    Christophe Charron

  6. #6
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Bonjour,
    la nuit portant conseil, ce matin, j'ai essayé
    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
    27
    28
    29
    30
    <?php
    $html = <<<EOT
    <html>
      <head>
        <title>Base64</title>
      </head>
      <body>
        <div >
          Ma tortue : <br />
          <img src="data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAABgf/xAAlEAACAQMDAwUBAAAAAAAAAAABAgQDBREGEiEAMUEHExUiYTL/xAAVAQEBAAAAAAAAAAAAAAAAAAADBP/EABoRAQACAwEAAAAAAAAAAAAAAAEAIQIDEhP/2gAMAwEAAhEDEQA/AEFw9T51unzLtVrq1tiyacdraoolmRh9mDBt+9T3BwPGPIQ6R9W9P6rlCEfct812ApUpBGKue21hxn8OM+M9SLW+jbp85da9n0tdFtgktGoqiMxLAAllUDPt5OVPI/R2B2zaC1FdLlMhLDqU5sJaVRow+tU72AAz/Kd8kk5HPB5HU2v1FMruD1n2gVP/2Q=="/>
        </div><br />
      </body>
    </html>
    EOT;
        $motif='@src="data:image/png;base64,([[:print:]]+)"@im';
        preg_match_all($motif,$html,$preg_res);
        $file[0] = array();
        foreach( $preg_res[1] as $base64 ) {
          if(!in_array($base64,$file[0])) {
            $id=md5(uniqid(rand())).$_SERVER['SERVER_NAME'];
            $file[0][$base64]=$id;
            $file[1][$base64]=$motif;
            $file[2][$base64]='src="cid:'.$id.'"';
            $file[3][$base64]=$base64;
          }
        }
        unset($preg_res);
        $html=preg_replace($file[1],$file[2],$html);
    echo $html;
    ?>
    et cela fonctionne comme je le veux.
    Cordialement,
    Christophe Charron

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

Discussions similaires

  1. [RegEx] Utilisation de preg_match_all()
    Par student_ dans le forum Langage
    Réponses: 8
    Dernier message: 15/05/2011, 17h00
  2. [RegEx] Utilisation de preg_match_all
    Par Invité dans le forum Langage
    Réponses: 7
    Dernier message: 31/10/2008, 20h02
  3. [RegEx] Utilisation de preg_match_all pour un fichier externe
    Par divad dans le forum Langage
    Réponses: 6
    Dernier message: 07/05/2008, 12h10
  4. [RegEx] Utilisation de preg_match_all
    Par pifoux2000 dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2008, 10h06
  5. [RegEx] Problème d'utilisation de preg_match_all()
    Par hemgui dans le forum Langage
    Réponses: 7
    Dernier message: 16/05/2007, 17h22

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