Hello,
Penyelesaian anda tidak baik pada umumnya. Mengapa? Ini bekerja dengan surat dengan kod ASCII di bawah 256 (ditukar dan dipaparkan baik) tetapi surat dengan kod ASCII lebih 256 Saya telah "?" tanda-tanda.
Jadi, Kita perlu menggabungkan penyelesaian dua dalam satu 
contoh:
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;
}
baris ini: define daripada surat dengan kod ASCII di bawah 256 akan tidak dinyahkod oleh fungsi saya tetapi hanya oleh Saya menguji ia still.I tak sepenuhnya pasti bahawa semua kerja-kerja betul sekarang.
Anda juga boleh menguji!