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] Limiter une chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 26
    Points
    26
    Par défaut [Problème] Limiter une chaine
    Bonjour,

    Voila je cherche à exporter d'un code html seulement l'adresse URL et L'url de l'image qui sera presente dans ce code.

    j'ai donc fait ce code :

    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
     
    <?
    $string = '<a href="http://www.softdomaine.fr"><img src="image.jpg" /></a>';
     
    $debut_a = strpos('href="', $string);
    $fin_a = strpos('">', $string);
     
    $debut_i = strpos('src="', $string);
    $fin_i = strpos('" />', $string);
     
    $url = substr($string,$debut_a,$fin_a);
    $img = substr($string,$debut_i,$fin_i);
     
    echo 'L\'url est : '.$url.' <br /><br />';
    echo 'l\'image est : '.$img.'';
     
    echo '<br /><br />La position de debut de l\'url est : '.$debut_a.'';
    echo '<br />La position de fin de l\'url est : '.$fin_a.'';
     
    echo '<br /><br />La position de debut de l\'image est :'.$debut_i.'';
    echo '<br />La position de fin de l\'image est : '.$fin_i.'';
     
    ?>
    J'ai regardé la FAQ PHP bien sur pour voir ce qu'il en disait cependant sa ne m'aide pas énormément, le resultat de ce script donne :

    L'url est :

    l'image est :

    La position de debut de l'url est :
    La position de fin de l'url est :

    La position de debut de l'image est :
    La position de fin de l'image est :
    et je vois vraiment pas pourquoi ...

    Merci de m'aider.
    Au revoir

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Pour ne pas tout faire pas RegEx ?
    Voici de quoi t'inspirer : Initiation aux expressions régulières en PHP

    Ca pourrait peut etre te faire changer de méthode

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 26
    Points
    26
    Par défaut
    Ok, je regarde, je te remercie, cependant je ne me rappelle pas pouvoir faire ceci avec les expressions régulières, enfin je vais encore regarder et je tiens au courant.

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ben si tu fais avec un masque de ce style ca pourrait fonctionner parfaitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#<a href="([^\]]*)"><img src="([^\]]*)" \/><\/a>#Usi';
    hum : pas testé

  5. #5
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Sinon c'est possible et très puissant en utilisant le dom, notamment cette fonction:

    http://fr.php.net/manual/fr/function...sbytagname.php

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos réponses !

    Mais je suis pas a big boss en php je connais un tout petit peux les class, et vraiment un tout petit peux les regex alors bon ^^

    je m'en vois un peu ^^

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 26
    Points
    26
    Par défaut
    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
     
    $url  = '#<a href="([^"]+)">(.*)</a>#Usi';
    $img = '#<img src="([^"]+)">#Usi';
     
    $lien = array();
    $lien[] = '<a id="Lien11" href="http://www.wipub.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" target="_blank">
    <img border=0 src="http://www.wipub.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"></a>';
     
     
    foreach($lien as $subject){
        $matches = array();
        if( (preg_match_all($url, $subject, $matches, PREG_SET_ORDER))&&(preg_match_all($img, $subject, $matches, PREG_SET_ORDER)) )
    	{
         /*
    	 Insertion
    	 Dans la
    	 Base de
    	 Données
    	 */
        }
        else
    	{
            echo "Le code de l'annonceur est incorrecte";
        }
     
    }
    Donc voila ce que j'ai fais, cependant cela m'affiche :

    Le code de l'annonceur est incorrecte
    Merci de votre aide.

    PS: Enfete pour ceux qui aurait pas compris, je cherche à ajouter des bannières d'annonceurs dans une base de donnée mais en séparant de l'url de l'image, donc je souhaiterais mettre le code tel quelle dans un champs texte, que sa me récupère l'url et l'image et j'insere les deux dans la BD

  8. #8
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Je sais pas si tu as remarqué mais c'est normal que tu trouves pas la chaine recherchée tu lui donnes un masque et ce masque ne correspond pas à ce que tu lui donnes comme lui.
    voici ton masque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $url  = '#<a href="([^"]+)">(.*)</a>#Usi';
    $img = '#<img src="([^"]+)">#Usi';
    ps : ton masque dois échapper les caractères utilisés à la base par les RegEx. Donc ce masque serait plus approprié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $url  = '#<a href="([^"]+)">(.*)<\/a>#Usi';
     $img = '#<img src="([^"]+)">#Usi';
    et voilà comment ton lien est fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $lien[] = '<a id="Lien11" href="http://www.wipub.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" target="_blank">
    <img border=0 src="http://www.wipub.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"></a>';
    Il y a une grosse différence, notamment du coté du border qui apparait dans img avant le src de meme pour le <a>.Pour que ce soit accepté il faut rajouté ces éléments dans ton masque.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 26
    Points
    26
    Par défaut
    Oui cependant chaque régie ne fait pas leur code ainsi ...

    j'ai modifier avec ton code, j'ai enlever le border=0 et j'ai toujour la même erreur

  10. #10
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Avec le dom, s'il est activé sur ton serveur, voici un exemple de code pour exporter tous les src des images. Facile ensuite d'afficher également les HREF des balises A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $doc = @DOMDocument::loadHTML($html);
     
    $tags = $doc->getElementsByTagName("img"));
    if ($tags->length) {
    	foreach ($tags as $tag) {
    		echo "<br/>Image détectée. URL=".utf8_decode($tag->getAttribute('src'));
    	}
    }

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 26
    Points
    26
    Par défaut
    Merci pour toutes vos réponses et voici ce que j'ai fais :

    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
    33
    34
    35
    36
     
    <?
     
     
     function Str_entre($strsource,$strleft,$strright)
    {
     
    if ($strleft <> "") 
        {
       $intstart = strpos($strsource,$strleft)+strlen($strleft); 
          if (strpos($strsource,$strleft) === FALSE) return ""; 
           }
      else
             $intstart = 0; 
     
           if ($strright <> "") 
                    {
                    $intlen = strpos(substr($strsource,$intstart,strlen($strsource)),$strright); 
             if (strpos(substr($strsource,$intstart,strlen($strsource)),$strright) === FALSE) return ""; 
             }
       else
            $intlen = (strlen($strsource) - $intstart);
     
        return substr($strsource,$intstart,$intlen);    
     }
     
     
    $string = '<a id="Lien11" href="http://www.wipub.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX" target="_blank">
    <img border=0 src="http://www.wipub.com/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx"></a>';
     
    $url = Str_entre($string,'href="','"');
    $img = Str_entre($string,'src="','">');
     
    echo "$url <br /><br /> $img";
     
    ?>
    Et devinez quoi ? Sa fonctionne parfaitement bien

    Je vous remercie
    Au revoir

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

Discussions similaires

  1. problème avec une chaine de connexion
    Par étudiant49 dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/08/2010, 11h48
  2. Problème d'une chaine incomplète
    Par paradeofphp dans le forum VB.NET
    Réponses: 17
    Dernier message: 04/10/2007, 23h45
  3. Réponses: 8
    Dernier message: 06/05/2007, 21h47
  4. Réponses: 5
    Dernier message: 26/07/2006, 11h13
  5. Réponses: 3
    Dernier message: 26/05/2006, 19h49

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