get meta description tag with xpath

后端 未结 5 1956
生来不讨喜
生来不讨喜 2021-02-07 06:39

I need the content the description and the keywords tag content. I have this code, but dont write anything. Idea?

$str = <<< EOD



        
相关标签:
5条回答
  • 2021-02-07 07:08

    You can reference the attributes using @ followed by the attribute name (see below), and you can query directly for the attributes; your XPath query was almost there.

    // Look for the content attribute of description meta tags 
    $contents = $xpath->query('/html/head/meta[@name="description"]/@content');
    
    // If nothing matches the query
    if ($contents->length == 0) {
        echo "No description meta tag :(";
    // Found one or more descriptions, loop over them
    } else {
        foreach ($contents as $content) {
            echo $content->value . PHP_EOL;
        }
    }
    
    0 讨论(0)
  • 2021-02-07 07:08

    In stead of including the /html/head part you could also use double slash which means that the following node can be anywhere in the code:

    //meta[@name='description']
    

    Will give the same result as:

    /html/head/meta[@name='description']
    

    Doesn't really matter much but it's less typing...

    0 讨论(0)
  • 2021-02-07 07:11

    You have two problems. First, name is an attribute so you need to prepend @,

    $nodes = $xpath->query('/html/head/meta[@name="description"]');
    

    Second, the nodes are all empty so there is nothing to print.

    To print the attribute value, do this,

    foreach($nodes as $node){
      $attr = $node->getAttribute('content');
      print $attr;
    }
    
    0 讨论(0)
  • 2021-02-07 07:17

    Make sure that you put EOD; at a line without any spaces and indentation like:

      $str = <<< EOD
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    
    EOD;
    
    0 讨论(0)
  • 2021-02-07 07:21

    Last but not least, and sorry for reviving this thread, the queries are case sensitive.

    In other words, if you look for meta name="description"... or "meta name="keywords", it will not find "meta name="Description"... or "meta name="Keywords"... respectively. So careful with that!

    And I can tell you, after working a while with xdom and metatags, eventually I believe that the best approach for that is to use this function: http://php.net/manual/es/function.get-meta-tags.php

    0 讨论(0)
提交回复
热议问题