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 :

Sous-chaîne de caractères de longueur variable.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 20
    Points
    20
    Par défaut Sous-chaîne de caractères de longueur variable.
    Bonjour,
    Je souhaite sélectionner une sous-chaîne de caractères, malheureusement cette sous-chaîne est de longueur variable, par contre elle est toujours comprise entre les caractères = et &.
    Existe-il une fonction qui prend les caractères contenus entre deux caractères spécifiques ?

    Pour le moment mon code est peu académique. Par exemple, de la chaîne "http://www.site.com/sites/entrez?term=AJ011504&cmd=Search&db=nuccore", je prend la partie à droite du caractère =, de cette sous-chaîne je prend la partie à gauche du caractère &, puis je prend l'ensemble des caractères excepté le premier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach($dom->getElementsByTagName('a') as $link) {
            if( strstr($link->getAttribute('href'), "/entrez?term=")) {
                      $chaine = strstr($link->getAttribute('href'), '=');
                      $chaine = strstr($chaine, '&', true);
                      $chaine = substr($chaine,1);
                      echo $chaine;
                      echo "<br />";
                      $TableauLiens[] = $chaine;                  
              }
    Merci pour vos conseils

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En gros, tu cherches à lire les paramètres d'une url, non ? Regarde du côté de parse_​url et parse_​str.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Merci Celira, j'ai un autre souci, dans le script suivant la variable $espece est vide à l'intérieur du bloc IF mais j'en ai besoin pour la mètre dans un ARRAY. Pourquoi est-elle vide dans le bloc alors qu'elle possède une chaîne de caractère avant d'entrer dans le bloc ?

    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
    37
    <?php
    $url = "http://www.bacterio.net/pseudomonas.html";
     
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $html = curl_exec($ch);
    curl_close($ch);
     
    $dom = new DOMDocument();
     
    @$dom->loadHTML($html);
     
    foreach($dom->getElementsByTagName('a') as $link) {
            $espece = $link->getAttribute('name');
                echo $espece;  //contient le nom d'espèce avant le bloc IF
                //Vérification si l'adresse concerne un lien d'un numéro d'accession
    			if( strstr($link->getAttribute('href'), "term=")) {    
                  $chaine = strstr($link->getAttribute('href'), 'term=');
    			  //echo($chaine);
    			  if (strlen($chaine)>13) {
                  //echo($chaine);
    			  $chaine = strstr($chaine, '&', true);
                  $chaine = substr($chaine,5);
    			  } else {
    			  $chaine = substr($chaine,5);
    			  } //if else
                  echo $espece; //vide à l'intérieur du bloc, pourquoi ?
    			  echo $chaine;
                  echo "<br />";
                  $TableauLiens[] = $chaine; 
                  $TableauEspeces[] = $espece;
                } 
    }
    ?>

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tes tests ne sont pas assez précis :
    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
    if( strstr($link->getAttribute('href'), "term=")) {
    	echo 'entrée dans la condition<br/>';
    	$chaine = strstr($link->getAttribute('href'), 'term=');
    	//echo($chaine);
    	if (strlen($chaine)>13) {
    		//echo($chaine);
    		$chaine = strstr($chaine, '&', true);
    		$chaine = substr($chaine,5);
    	} else {
    		$chaine = substr($chaine,5);
    	} //if else
    	echo '$espece :<br/>';
    	var_dump($espece); //vide à l'intérieur du bloc, pourquoi ?
    	$TableauLiens[] = $chaine; 
    	$TableauEspeces[] = $espece;
    	echo 'sortie de la condition<br/>';
    	} 
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Merci pour la réponse Sabotage mais même avec var_dump cela ne résoud pas le problème. La variable $espece reste vide alors qu'elle ne l'est pas avant le bloc IF.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Un debugage ne resout pas un problème, il met en avant le problème.
    Qu'obtiens-tu comme affichage sur ce debugage ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    J'obtiens :
    string(0) "" $espece :

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne vois pas les entrées / sorties de condition ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    non

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu ne vois pas les entrées / sorties de condition ?
    Avec var_dump dans le bloc :
    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
    # Iterate over all the <a> tags
    foreach($dom->getElementsByTagName('a') as $link) {
            $espece = $link->getAttribute('name');
                //echo '$espece avant le bloc if :<br/>';
    			//echo $espece;
    			//var_dump($espece);
                //Vérification si l'adresse concerne un lien d'un numéro d'accession
    			if( strstr($link->getAttribute('href'), "term=")) {    
                  $chaine = strstr($link->getAttribute('href'), 'term=');
    			  if (strlen($chaine)>13) {
    			  $chaine = strstr($chaine, '&', true);
                  $chaine = substr($chaine,5);
    			  } else {
    			  $chaine = substr($chaine,5);
    			  } //if else
                  echo '$espece dans le bloc if :<br/>';
    			  //echo $espece;
    			  var_dump($espece);
    			  echo $chaine;
                  echo "<br />";
                  $TableauLiens[] = $chaine; 
                  $TableauEspeces[] = $espece;
                } //if 
                //echo '$espece après le bloc if :<br/>';
    			//echo $espece;
    			//var_dump($espece);
    }
    j'obtiens
    $espece dans le bloc if :
    string(0) "" EF660747
    $espece dans le bloc if :
    string(0) "" EU887285
    $espece dans le bloc if :
    string(0) "" JF449425
    $espece dans le bloc if :
    string(0) "" -
    $espece dans le bloc if :
    string(0) "" DQ344973
    $espece dans le bloc if :
    string(0) "" DQ344974

    avec var_dump avant le bloc
    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
    # Iterate over all the <a> tags
    foreach($dom->getElementsByTagName('a') as $link) {
            $espece = $link->getAttribute('name');
                echo '$espece avant le bloc if :<br/>';
    			//echo $espece;
    			var_dump($espece);
                //Vérification si l'adresse concerne un lien d'un numéro d'accession
    			if( strstr($link->getAttribute('href'), "term=")) {    
                  $chaine = strstr($link->getAttribute('href'), 'term=');
    			  if (strlen($chaine)>13) {
    			  $chaine = strstr($chaine, '&', true);
                  $chaine = substr($chaine,5);
    			  } else {
    			  $chaine = substr($chaine,5);
    			  } //if else
                  //echo '$espece dans le bloc if :<br/>';
    			  //echo $espece;
    			  //var_dump($espece);
    			  echo $chaine;
                  echo "<br />";
                  $TableauLiens[] = $chaine; 
                  $TableauEspeces[] = $espece;
                } //if 
                //echo '$espece après le bloc if :<br/>';
    			//echo $espece;
    			//var_dump($espece);
    }
    j'obtiens
    $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(1) "r" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(20) "haladaptatusemendcui" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(20) "haladaptatusemendroh" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(8) "cibarius" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" EF660747
    $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(8) "litoreus" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" EU887285
    $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(14) "pallidirubidus" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" JF449425
    $espece avant le bloc if :
    string(0) "" -
    $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(15) "paucihalophilus" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" DQ344973
    $espece avant le bloc if :
    string(0) "" DQ344974
    $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) "" $espece avant le bloc if :
    string(0) ""

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/12/2011, 16h59
  2. Réponses: 8
    Dernier message: 23/06/2011, 17h51
  3. [PostgreSQL] Sélection d'une sous-chaîne de caractères
    Par ElodieS dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/11/2009, 11h35
  4. Réponses: 13
    Dernier message: 26/09/2008, 17h43
  5. Réponses: 1
    Dernier message: 30/04/2007, 15h33

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