2011-01-16 18 views
7

Mam ciąg HTML, który chciałbym sprawdzić, aby sprawdzić, czy są w nim jakieś linki, a jeśli tak, wyodrębnij je i umieść w tablicy. Mogę to zrobić w jQuery z prostotą jego selektorów, ale nie mogę znaleźć odpowiednich metod do użycia w PHP.PHP String Manipulation: Extract hrefs

Na przykład, łańcuch może wyglądać następująco:

<h1>Doctors</h1> 
<a title="C - G" href="linkl.html">C - G</a> 
<a title="G - K" href="link2.html">G - K</a> 
<a title="K - M" href="link3.html">K - M</a> 

Jak (w PHP) mogę włączyć go do tablicy, która wygląda mniej więcej tak:

[1]=>"link1.html" 
[2]=>"link2.html" 
[3]=>"link3.html" 

Dzięki, Ian

+0

Możliwy duplikat [Chwytając atrybutu href od An Element] (http://stackoverflow.com/questions/3820666/grabbing-the-href-attribute-of-an-a-element) – j08691

Odpowiedz

17

Można użyć PHPs DOMDocument biblioteka do parsowania XML i/lub HTML. Coś jak poniżej powinno wystarczyć, aby uzyskać atrybut href z ciągu znaków HTML.

$html = '<h1>Doctors</h1> 
<a title="C - G" href="linkl.html">C - G</a> 
<a title="G - K" href="link2.html">G - K</a> 
<a title="K - M" href="link3.html">K - M</a>'; 

$hrefs = array(); 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$tags = $dom->getElementsByTagName('a'); 
foreach ($tags as $tag) { 
     $hrefs[] = $tag->getAttribute('href'); 
} 
1

Twoje pytanie jest trudne do zrozumienia, ale wierzę, że chcesz PHP Parsera DOM, możesz znaleźć prosty parser tutaj: http://simplehtmldom.sourceforge.net/ i małe użycie exampl e wynosi:

$array = array(); 
foreach($html->find('a') as $a) 
{ 
    $array[] = $a->href; 
} 

cię można użyć jQuery to powinieneś być w stanie korzystać z tego żadnego problemu, ponieważ jego układ wybierający jest taka sama jak jQuery aswell jak CSS, jak jQuery pochodzi z CSS

-1

jeśli format jest zawsze taki sam, u można prawdopodobnie rozwiązać to za pomocą kombinacji eksplodować i strip_tags coś podobnego

$html="<span class="field-content"><a href="http://url_to_extract">whatever</a></span>" 


$href=end(explode('"',strip_tags($html)));