「PHPとMYSQLを学ぶ - 文字エンコーディング(前編)」では、UnicodeとUTF-8の変換関係を紹介し、このエンコーディング規則に基づいてUTF-8エンコーディング解析プログラムをまとめます。
/* プログラム関数、$str は UTF-8 でエンコードされた文字列です。中国語と英語が混在しています。この文字列は、UTF-8 エンコード規則に従って正しくデコードされ、表示されます。
*/
$str = '今日はとても幸せです、みんなはコーラの手羽先を食べにKFCに行くことに決めました!!!';
/*
$str はインターセプトされる文字列です
$len は数値ですインターセプトする文字数
*/
function utf8sub($str,$len) {
if($len <= 0){
return ''; // インターセプト時のオフセット-order byte
$chars = 0; // インターセプトされた文字の数
$res = ''; // インターセプトされた結果の string
while($chars < $len){
// の最初のバイトを取得しますまず文字列
// 10 進数に変換します
// 次に 2 進数に変換します
$high = ord(substr($str,$offset,1));
// echo '$high='.'
';
if($high == null ){ // 上位ビットが null の場合は、最後までフェッチされたことを示し、直接中断します
break
}
if(( $high>>2) == = 0x3F){ // 上位ビットを右に 2 ビットシフトし、バイナリ 111111 と比較します。同じ場合は 6 バイトを取得します
// 2 バイトをインターセプトします
$count = 6;
}else if(($high>> 3) === 0x1F){ // 上位ビットを右に 2 ビットシフトし、バイナリ 11111 と比較します。同じ場合は 5 バイトを取得します。
// 3 バイトをインターセプト
$count = 5;
}else if(($ high>>4) === 0xF){ // 上位ビットを 2 ビット右にシフトし、バイナリ 1111 と比較します。同じ場合は 4 バイトを取得します
// 4 バイトをインターセプトします
$count = 4;
} else if(($high>>5) === 0x7){ // 上位ビットを右にシフトします2 ビットずつ増やしてバイナリ 111 と比較します。同じ場合は 3 バイトを取得します
// 5 バイトをインターセプトします
$count = 3;
}else if(($high>>6) === 0x3) { // 上位ビットを右に 2 ビットシフトし、バイナリ 11 と比較します。同じ場合は 2 バイトを取得します
// 6 ワードをインターセプト セクション
$count = 2
}else if(($high> ;>7) === 0x0){ // 上位ビットを右に 2 ビットシフトし、バイナリの 0 と比較し、同じ場合は 1 バイトを取る
$count = 1
}
// echo '$count='.$count.'
';
$res .= substr($str,$offset,$count); // $res文字列と連結します
$ chars += 1; // インターセプトされた文字数 + 1
$offset += $count; // 上位オフセットをインターセプトし、$count バイトを後方に移動します
}
return $res
}
echo utf8sub($str,100) );
http://www.bkjia.com/PHPjc/326131.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/326131.html
技術記事 「Learn PHPlt;?php /* プログラム関数」では、$str は中国語と英語が混在した UTF-8 エンコード文字列です。この文字列は、UTF-8 エンコード規則に従って正しくデコードされ、表示されます。 */ $str = '今日はとても...