Dalam "Pembelajaran PHP & MYSQL - Pengekodan Aksara (Bahagian 1)", hubungan penukaran antara Unicode dan UTF-8 diperkenalkan, dan peraturan pengekodan UTF-8 diringkaskan Berdasarkan peraturan pengekodan ini, program penghuraian pengekodan UTF-8 ditulis. , berikut ialah pelaksanaan PHP:
/*
Fungsi program, $str ialah rentetan berkod UTF-8 yang dicampur dengan bahasa Cina dan Inggeris
Nyahkod dan paparkan rentetan ini dengan betul mengikut peraturan pengekodan UTF-8.
*/
$str = 'Hari ini sangat gembira, jadi kami memutuskan untuk pergi ke KFC untuk makan kepak ayam Coke!!!';
/*
$str akan dipintas Rentetan
$len ialah bilangan aksara yang dipintas
*/
fungsi utf8sub($str,$len) {
jika($len <= 0) {
kembali '' ;
}
$offset = 0; // Offset apabila memintas bait tertib tinggi
$chars = 0; res = '' ; // Simpan rentetan hasil yang dipintas
while($chars < $len){
// Ambil bait pertama rentetan dahulu
// Tukarkannya kepada perpuluhan
// Kemudian tukar kepada perduaan
$high = ord(substr($str,$offset,1)); br />';
jika($high == null ){ // Jika bit tinggi adalah batal, ia membuktikan bahawa ia telah diambil hingga tamat, patahkan terus
pecah; >}
if( ($high>>2) === 0x3F){ // Alihkan bit tinggi ke kanan sebanyak 2 bit dan bandingkan dengan binari 111111. Jika sama, ambil 6 bait
// Minta 2 bait
$count = 6;
}else if(($high>>3) === 0x1F){ // Alihkan bit tinggi ke kanan sebanyak 2 bit dan bandingkan ia dengan binari 11111. Jika ia sama, ambil 5 bait
// Pisahkan 3 bait
$kira = 5;
}lain jika(($tinggi>>4) === 0xF) { // Alihkan bit tinggi ke kanan sebanyak 2 bit dan bandingkan dengan binari 1111. Jika ia adalah sama, maka Ambil 4 bait
// Ambil 4 bait
$count = 4; 🎜>}else if(($high>>5) === 0x7){ // Akan Menganjak bit tinggi ke kanan sebanyak 2 bit dan bandingkan dengan binari 111. Jika sama, ambil 3 bait
// Memintas 5 bait
$count = 3;
}else if(($high> >6) === 0x3){ // Alihkan bit tinggi ke kanan sebanyak 2 bit, bandingkan dengan binari 11, jika sama, ambil 2 bait
// Pintasan 6 bait
$kira = 2;
}lain jika(($tinggi>>7) === 0x0){ // Alihkan bit tinggi ke kanan sebanyak 2 bit dan bandingkan dengan binari 0. Jika ia sama, ambil 1 bait
$count = 1; $count.'
';
$res .= substr($str,$offset,$count); $chars += 1; // Bilangan aksara yang dipintas + 1
$offset += $count; // Pintasan offset tinggi dan gerakkannya ke belakang sebanyak $count Bytes
}
kembali $res
}
gema utf8sub($str,100);