HTML 5 è disponibile da circa 16 anni ma per quanto possa sembrare strano PHP non lo ha mai supportato nativamente. In pratica il noto linguaggio per lo sviluppo server side integra un suo \DOMDocument
per il parsing dei documenti HTML ma il supporto con quest'ultimo non si estende oltre la versione 4.01 che possiamo tranquillamente considerare obsoleta. Detto ciò, neanche in questo caso PHP è completamente compliant con HTML. Indipendentemente dalla release di quest'ultimo.
Il problema tra PHP e HTML 5
L'estensione DOM (Document Object Model) di PHP è stata sviluppata a partire da libxml2 che è una libreria Open Source scritta in linguaggio C per la manipolazione di file XML. Fin qui tutto bene, si tratta di una soluzione abbastanza completa. Può essere utilizzata infatti in vari linguaggi di programmazione grazie a diversi binding disponibili per Python, Perl, Ruby e, naturalmente, lo stesso C.
Se però si tenta di utilizzare la funzione PHP loadHTML()
, che carica appunto il codice HTML da una stringa, il risultato che si ottiene è un errore. A questo proposito è la stessa documentazione ufficiale del linguaggio s sottolineare che:
This function parses the input using an HTML 4 parser. The parsing rules of HTML 5, which is what modern web browsers use, are different. Depending on the input this might result in a different DOM structure. Therefore this function cannot be safely used for sanitizing HTML.
La soluzione è in un nuovo parser
Il ritardo accumulato nel tempo verrà colmato grazie a PHP 8.4. Versione della quale è stata rilasciata di recente la seconda Alpha. Esso infatti utilizza un parser HTML differente rispetto agli aggiornamenti precedenti. Presenta inoltre la nuova classe DOM\HTMLDocument
che potrà essere utilizzata senza osservare cambiamenti di comportamento nell'accesso al DOM.
Per utilizzare questo strumento non si dovrà fare alto che invocarlo in questo modo:
$dom = \Dom\HTMLDocument::createFromString($codicehtml);
Si noti che la sintassi scelta si basa interamente sui costruttori, non vi sono infatti chiamate ai metodi. Maggiori dettagli saranno disponibile mano a mano che si avvicinerà il rilascio di PHP 8.4. Quest'ultimo è stato fissato per il 21 novembre 2024.