2017-07-28 4 views
1

PHP-Experten.Fehler mit PHP-Simple_html_dom-Parser

Ich habe einen Fehler bei der Verwendung der Klasse simple_html_dom gefunden.

Meine HTML-Strings müssen geparst werden wie folgt.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>Y-shaped ZnO Nanobelts Driven from Twinned</title> 

<meta name="site" content="Reports"/> 

<meta name="description" content="Description with twinned planes {11&#"/> 

<meta name="image" content="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a"/> 


... 


</body> 
</html> 

Ich habe versucht, das Meta-Tag mit dem Namen Bild mit find ("meta [name = Bild]") zu bekommen, ich konnte aber nicht.

Ich überprüfte den Grund und stellte fest, dass es wegen der Zeichen '& #' in der Mitte der obigen Zeile davon ist.

<meta name="description" content="Description with twinned planes {11&#"/> 

bekam ich den Inhalt Attribut dieser Meta-Tag, wie die in diesem Fall

Description with twinned planes {11&#"/> <meta name="image" .... 

Also, was soll ich tun, die simple_html_dom analysieren richtig die HTML für die Vermietung?

Sonst gibt es irgendeine andere Bibliothek, die diesen HTML korrekt analysiert?

+0

ist es nicht ein Problem, dass der {11 & # sollte {11 & sein # –

Antwort

0

Versuchen Sie diesen Code: Verwenden Sie php DomDocument

Sie können Meta getElementsByTagName mit bekommen und erhalten Attributwert mit getAttribute

$hml = '<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>Y-shaped ZnO Nanobelts Driven from Twinned</title> 

<meta name="site" content="Reports"/> 

<meta name="description" content="Description with twinned planes {11&#"/> 

<meta name="image" content="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a"/> 
</head> 
<body> 

</body> 
</html>'; 

$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 

$dom->loadHTML($hml); 

$metas = $dom->getElementsByTagName('meta'); 

foreach($metas as $meta){ 

if($meta->getAttribute('name')=="image"){echo $meta->getAttribute('content');} 

} 

Ausgang:

https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a 

Hinweis: Wenn Sie Lade Inhalt von einer Seite $dom->loadHTMLFile("your_pagename.html"); anstelle dieses $dom->loadHTML($hml);