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

  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

  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 !!

  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.

+ 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