2011-02-03 1 views
0

Im faire un script pour obtenir d'autres pages de contenu, et im en ce moment à travailler sur une fonction qui devrait obtenir le contenu de l'étiquette ... mais im un peu coincé: DComment obtenir un contenu de tag?

found a new tag of same kind inside tag... 
nothing found... 
1111 
2222 

est imprimé.

<?php 

function d($toprint) 
{ 
    echo $toprint."<br />"; 
} 

function GetTagContents($source, $tag, $pos) 
{ 
    $startTagPos  = strpos($source, "<".$tag, $pos); 
    $startTagEndPos  = strpos($source, ">", $startTagPos)+1; 

    $endTagPos   = strpos($source, "</".$tag, $startTagEndPos); 

    $lastpos = $startTagPos+1;  
    while($lastpos != False) 
    { 
     $newStartTagPos = strpos($source, "<".$tag, $lastpos); 

     if($newStartTagPos == False) 
     { 
      d("nothing found..."); 
      $lastpos = False;   
     } 
     else if($newStartTagPos > $endTagPos) 
     { 
      d("out of bounds..."); 
      $lastpos = False; 
     } 
     else 
     { 
      d("found a new tag of same kind inside tag..."); 
      $lastpos = $newStartTagPos+1;  
      $endTagPos = strpos($source, "</".$tag, $newStartTagPos); 
     } 
    } 

    return substr($source, $startTagEndPos, $endTagPos-$startTagEndPos); 
} 
?> 
<html> 

    <body> 
    <?php 

    d(GetTagContents('<div>1111<div>2222</div>3333</div>', "div", 0)); 

    ?> 
    </body> 

</html> 

quelqu'un a-t-il des idées?

+0

http://stackoverflow.com/questions/1732348/regex-match -open-tags-sauf-xhtml-self-contained-tags/1732454 # 1732454/moi à la rescousse – zerkms

+0

Btw, si vous voulez vraiment analyser manuellement - vous pouvez commencer à lire http://en.wikipedia.org/wiki/Finite-state_machine – zerkms

+1

vous pouvez utiliser la classe simplexml pour votre raison – AmirModiri

Répondre

2

utilisant PHP DOM:

$src = new DOMDocument('1.0', 'utf-8'); 
$src->formatOutput = true; 
$src->preserveWhiteSpace = false; 
$src->load('path/to/file.html'); 

$tagName = 'foo'; 
$element = $src->getElementsByTagName($tagName)->item(0); 
var_dump($element->nodValue) 
+0

après beaucoup d'avertissements NULL a été jeté ... :(Je veux charger des pages à partir d'autres domaines, cela fonctionnerait-il encore? – Jason94

+0

@ Jason94 Cela devrait fonctionner mais le HTML/XHTML doit être valide. Utilisez HTML Purifier pour nettoyer le code HTML avant de l'envoyer vers PHP DOM. –

+0

@ Jason94 Pourriez-vous me donner un lien vers un exemple de site Web HTML que vous voulez analyser? Je vais essayer de jouer avec quand je rentre à la maison plus tard aujourd'hui pour m'assurer que ça marche. –

0

strpos retournera 0 la première fois, et 0 == false en PHP. La vérification que vous souhaitez est de comparer le résultat avec ===, ce qui donne la valeur true si les deux valeurs ont la même valeur et le même type. Cela signifie que 0 == false est vrai mais que 0 === false n'est pas vrai.

0

vous pouvez utiliser cette

simplexml_load_string

$xml = "[div]1111[div]2222[/div]3333[/div]"; 

$loadStrring = simplexml_load_string($xml); 
foreach($loadStrring->children() as $name => $data) { 
    if($name ='div') 
     echo $data . "\n"; 
    } 
} 

+0

c'est la façon la plus simple que vous pouvez travailler avec les étiquettes – AmirModiri

Questions connexes