|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
rottman WRInaute accro

Inscrit le: 06 Jan 2004 Messages: 2096
|
Posté le : Ven Juil 08, 2005 12:15 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
Bonjour,
Je bloque sur un truc pourtant tout simple !
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: |
$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

Inscrit le: 18 Oct 2004 Messages: 151 Localisation: Dans les bras de Morphée
|
Posté le : Ven Juil 08, 2005 12:25 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
Hello,
Je n'ai pas testé, mais essaie ça:
| Code: |
<?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...  |
|
| |
|
 |
shrom WRInaute passionné

Inscrit le: 05 Juil 2004 Messages: 866
|
Posté le : Ven Juil 08, 2005 12:25 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
| Code: |
$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

Inscrit le: 30 Aoû 2002 Messages: 2322
|
Posté le : Ven Juil 08, 2005 12:30 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
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é

Inscrit le: 05 Juil 2004 Messages: 866
|
Posté le : Ven Juil 08, 2005 12:39 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
| 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

Inscrit le: 06 Jan 2004 Messages: 2096
|
Posté le : Ven Juil 08, 2005 12:43 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
ça me fait balise non trouvée |
|
| |
|
 |
shrom WRInaute passionné

Inscrit le: 05 Juil 2004 Messages: 866
|
Posté le : Ven Juil 08, 2005 12:50 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
Ouaip, j'avais encore fais une petite erreur, essaie avec ça:
| Code: |
$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

Inscrit le: 06 Jan 2004 Messages: 2096
|
Posté le : Ven Juil 08, 2005 12:54 Sujet du message: [reglé] Contenu entre 2 balises - PHP |
|
|
| Ouf, GRAND MERCI à vous tous. |
|
| |
|
 |
| |
|
|