[reglé] Contenu entre 2 balises - PHP

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


rottman
WRInaute accro
WRInaute accro
 
Messages: 2097
Inscription: Mar Jan 06, 2004 20:11

[reglé] Contenu entre 2 balises - PHP

Message le Ven Juil 08, 2005 12:15

Bonjour,

Je bloque sur un truc pourtant tout simple ! :oops:

J'ai une chaine, plus précisément la source d'une page, et je souhaite extraire le contenu entre les Xième <balise> et </balise>.

Voila ce que j'ai essayé sans succès :

Code: Tout sélectionner
$src = @implode("", file("page.html"));
   
if(eregi("<balise>(.*)</balise>",$src))
   {
      eregi("<balise>(.*)</balise>",$src,$nb);
      echo $nb[X];
   }
   
   else echo "<balise> non trouvée";
Dernière édition par rottman le Ven Juil 08, 2005 12:56, édité 1 fois.


magicaxe
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 151
Inscription: Lun Oct 18, 2004 19:00

Message le Ven Juil 08, 2005 12:25

:D Hello,

Je n'ai pas testé, mais essaie ça:

Code: Tout sélectionner
<?php

   $pos = 0;
   for($i = 0; $i < X && $pos !== false; $i++)
      $pos = strpos($content, "<balise>", $pos);
      
   if ($pos !== false)
   {
      $posend = strpos($content, "</balise>", $pos)   ;
      if ($posend !== false)
      {
         $str = substr ( $content, $pos + strlen("<balise>"), $posend - ($pos+strlen("<balise>")));
         //process $str ...
      }
   }
?>


En détail, tu recherche la Xième position de la balise
Ensuite, tu recherche la première position de la balise fermante à partir de la position de la Xième balise.

Ensuite tu récupère le texte entre deux... :D

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Ven Juil 08, 2005 12:25

Code: Tout sélectionner
$src = file_get_contents("page.html");
   
preg_match_all( "/<balise>(.*)<\/balise>/U", $src, $match );

if ( count( $match[1] ) > $x ) {
  echo 'Balise trouvée: '.$match[1][$x+1];
}
else {
  echo 'Balise non trouvée.';
}


Edité: j'avais oublié le U dans le pattern.
Dernière édition par shrom le Ven Juil 08, 2005 12:41, édité 2 fois.

jeroen
WRInaute accro
WRInaute accro
 
Messages: 2384
Inscription: Ven Aoû 30, 2002 13:35

Message le Ven Juil 08, 2005 12:30

Salut,
Le problème est que les REGEX sont gourmandes.
Avec ton code tu va englober de la première <balise> à la dernière </balise> sur la première occurence de recherche.

Il faut que ton (.*) empèche de prendre </balise>

Généralement le bidouille :
1/ Je remplace <balise> par un caractère spécial gamais utilisé (<¤> par exemple) et </balise> par </¤> (exemple)
2/ je recherche
eregi("<¤>([^¤]*)</¤>",$src,$nb);

Si y'a plus simple, je suis preneur aussi...

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Ven Juil 08, 2005 12:39

jeroen a écrit:Avec ton code tu va englober de la première <balise> à la dernière </balise> sur la première occurence de recherche.


Exact, j'ai édité le code pour ajouter le paramètre U dans le pattern qui permet de ne pas avoir de REGEXP gourmandes.


rottman
WRInaute accro
WRInaute accro
 
Messages: 2097
Inscription: Mar Jan 06, 2004 20:11

Message le Ven Juil 08, 2005 12:43

:-( ça me fait balise non trouvée

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Ven Juil 08, 2005 12:50

Ouaip, j'avais encore fais une petite erreur, essaie avec ça:
Code: Tout sélectionner
$src = file_get_contents("page.html");
   
preg_match_all( "/<balise>(.*)<\/balise>/U", $src, $match );

if ( count( $match[1] ) >= $x ) {
  echo 'Balise trouvée: '.$match[1][$x-1];
}
else {
  echo 'Balise non trouvée.';
}


Si tu veux la seconde occurence, $x = 2.


rottman
WRInaute accro
WRInaute accro
 
Messages: 2097
Inscription: Mar Jan 06, 2004 20:11

Message le Ven Juil 08, 2005 12:54

Ouf, GRAND MERCI à vous tous.


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Base

  • Calculer le ratio de liens profonds
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités