Remover carácteres no UTF-8 en PHP

Al momento de parsear un XML en UTF8 con carácteres no válidos se produce un corte y se pierde todo el contenido a partir del error. Abriendo el XML en Firefox mostrará directamente el error sin llegar a mostrar la estructura. Googleando probe varias soluciones pero la única que funcionó fue la siguiente:

Código:

function charset_decode_utf_8 ($string) {   /* Only do the slow convert if there are 8-bit characters */  /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */  if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string))return $string;  // decode three byte unicode characters  $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",  "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);  // decode two byte unicode characters  $string = preg_replace("/([\300-\337])([\200-\277])/e",  "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",  $string);  return $string;} 

Publicado por:
ignatius
Foro
PHP