hola,
La seva solució no és bona en general. Per què? Es tracta de treballar amb les cartes amb el codi ASCII en 256 (converteix i es mostra bé) però les cartes amb el codi ASCII de 256 que tinc "?" signes.
Així que hem de combinar aquestes dues solucions en un 
exemple:
PHP Code:
function vbet_encodeToSafeUTF8(&$string) {
$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('/([\304-\337])([\200-\277])/e',
'\'&#\'.((ord(\'\\1\')-192)*64+(ord(\'\\2\')-128)).\';\'',
$string);
$string = utf8_decode($string);
return $string;
}
aquesta línia: definir que les cartes amb el codi ASCII en 256 no seran descodificats per la meva funció, però només per Estic provant still.I no estic del tot segur que tot funciona correctament ara.
Pots provar també!