L'introduzione di HTML5 sul Web non ha sinora incontrato una pronta risposta da parte degli implementatori di PHP, in quanto l'estensione DOM di PHP non riconosce HTML5 e i suoi elementi. Il metodo DOMDocument::loadHTMLFile()
, infatti, restituisce immediatamente un errore non appena incontra il DOCTYPE HTML5. Tuttavia, una soluzione proposta su Stack Overflow di fatto aggira il problema: possiamo usare il metodo DOMDocument::loadXML()
passandogli il documento HTML5 come stringa. Per funzionare questa soluzione richiede che il documento di destinazione non sia malformato e che venga utilizzata la notazione XHTML per gli elementi vuoti. Vediamo insieme i dettagli di questa soluzione.
Possiamo usare questa tecnica in un'applicazione pratica che reperisce alcuni dati da un documento HTML5 remoto:
function getCSSTests()
{
$dom = new DOMDocument();
$file = @file_get_contents('http://www.css-zibaldone.com/test/index.html');
if($file) {
$dom->loadXML($file);
$ul = $dom->getElementsByTagName('ul')->item(3);
$li = $ul->getElementsByTagName('li');
$html = '<ul>';
foreach($li as $item) {
$a = $item->firstChild;
$href = $a->getAttribute('href');
$text = $a->firstChild->nodeValue;
$html .= '<li><a href="' . $href . '">' . $text . '</a></li>';
}
$html .= '</ul>';
echo $html;
}
}
Ho utilizzato questa funzione nella pagina dedicata ai test CSS di questo sito.