Maison >développement back-end >tutoriel php >Comment puis-je récupérer de manière fiable l'attribut `href` d'un élément `` en HTML ?

Comment puis-je récupérer de manière fiable l'attribut `href` d'un élément `` en HTML ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-28 05:41:13823parcourir

How Can I Reliably Retrieve the `href` Attribute from an `` Element in HTML?

Récupérer l'attribut href d'un élément A

Pour tenter de trouver des liens sur une page, une approche courante consiste à utiliser des expressions régulières. Cependant, dans des cas comme celui-ci :

<a title="this" href="that">what?</a>

où l'attribut href n'est pas placé en premier dans la balise a, l'expression régulière suivante peut échouer :

/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/

Trouver une expression régulière fiable pour la gestion du HTML peut être difficile. Comme alternative, envisagez d'utiliser le DOM (Document Object Model) à cette fin.

Utiliser le DOM pour gérer le HTML

Voici comment utiliser le DOM pour récupérer l'attribut href et d'autres informations de A elements :

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

// Loop through all 'a' elements
foreach ($dom->getElementsByTagName('a') as $node) {
    // Output the entire 'a' element's outer HTML
    echo $dom->saveHtml($node), PHP_EOL;
    
    // Get the node's text value
    echo $node->nodeValue; 
    
    // Check if the node has a 'href' attribute
    echo $node->hasAttribute( 'href' );
    
    // Get the 'href' attribute's value
    echo $node->getAttribute( 'href' );
    
    // Change the 'href' attribute's value
    $node->setAttribute('href', 'something else');
    
    // Remove the 'href' attribute
    $node->removeAttribute('href');
}

Utilisation de XPath pour interroger href Attribut

XPath peut également être utilisé pour interroger des attributs spécifiques, tels que l'attribut href :

$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
}

Conclusion

En utilisant le DOM, vous pouvez facilement récupérer et manipuler des attributs comme href des éléments A. Cette approche offre un moyen plus fiable et plus flexible de gérer le HTML que les expressions régulières.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn