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 27/07/2007, 15h36   #1
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
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
Citation:
<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
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 16h03   #2
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
vu que c'est pour remplacer, preg_replace serait peut etre plus ce que tu recherche.

Vite fait :
Code :
#<img src='data:image/(?:png|gif|bmp);base64,([A-Za-z0-9+/=]+?)'/>#
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 17h11   #3
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
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
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 20h41   #4
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
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 :
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);
 
?>
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 22h02   #5
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
Bonsoir et merci pour ton aide.
Entre temps, j'avais un peu progressé, c'est à dire que j'arrive à isoler ma chaine
Code :
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
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2007, 14h35   #6
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
Bonjour,
la nuit portant conseil, ce matin, j'ai essayé
Code :
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
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron 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 20h29.


 
 
 
 
Partenaires

Hébergement Web