Il modulo DOM di PHP contiene le funzionalità per manipolare gli oggetti dom: la classe radice è "DOMDocument", al quale può essere dato in pasto un testo in formato HTML o XML da decodificare e quindi elaborare come preferiamo.
Questa classe ha purtroppo dei noti problemi con il supporto a testi UTF-8 (e quando mai...).
Provate ad esempio questo codice, che in teoria non dovrebbe fare nulla (decodifica la stringa passata e la ricodifica senza farci nulla).