Niezawodne Regex dla HTML są trudne . Oto jak to zrobić z DOM :
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
echo $dom->saveHtml($node), PHP_EOL;
}
Powyższe mogłoby znaleźć i wyprowadzić „zewnętrzny HTML” wszystkich A
elementów w $html
ciągu.
Aby uzyskać wszystkie wartości tekstowe węzła, musisz to zrobić
echo $node->nodeValue;
Aby sprawdzić, czy href
atrybut istnieje, możesz to zrobić
echo $node->hasAttribute( 'href' );
Aby uzyskać ten href
atrybut zrobiłbyś
echo $node->getAttribute( 'href' );
Aby zmienić ten href
atrybut chcesz zrobić
$node->setAttribute('href', 'something else');
Aby usunąć ten href
atrybut zrobiłbyś
$node->removeAttribute('href');
Możesz również zapytać o href
atrybut bezpośrednio za pomocą XPath
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a/@href');
foreach($nodes as $href) {
echo $href->nodeValue; // echo current attribute value
$href->nodeValue = 'new value'; // set new attribute value
$href->parentNode->removeAttribute('href'); // remove attribute
}
Zobacz także:
Na marginesie: jestem pewien, że jest to duplikat, a odpowiedź można znaleźć gdzieś tutaj