UTF-8 文字列を正しく解析する PHP が必要な友人は、それを参照できます。
コードは次のとおりです |
コードをコピー |
$str = '今日はとても幸せです、みんなはコーラチキンウィングを食べるためにKFCに行くことに決めました!!!';
/*
$str はインターセプトされる文字列です
$len はインターセプトされた文字数です
*/
関数 utf8sub($str,$len) {
if($len
戻ります '';
}
$offset = 0; // 上位バイトをインターセプトするときのオフセット
$chars = 0; // インターセプトされた文字数
$res = ''; // インターセプトされた結果文字列を保存します
while($chars
// まず文字列の最初のバイトを取得します
//10進数に変換します
//バイナリに変換します
$high = ord(substr($str,$offset,1));
// '$high=' をエコーします。$high .' ';
if($high == null ){ // 上位ビットが null の場合、最後までフェッチされたことを証明し、直接ブレークします
休憩
}
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;
}
// エコー '$count='.$count.' ';
$res .= substr($str,$offset,$count); // 文字を取り出して $res 文字列に接続します
$chars += 1; // インターセプトされた文字数 +1
$offset += $count; // 上位オフセットをインターセプトし、$count バイトだけ後方に移動します
}
$res を返します;
}
echo utf8sub($str,100);
|
http://www.bkjia.com/PHPjc/632169.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632169.html技術記事 PHP で UTF-8 文字列を正しく解析するのに助けが必要な友人は、これを参照してください。 コードは次のとおりです。 コードをコピー $str = '今日はとても幸せなので、コーラの手羽先を食べに KFC に行くことにしました!!!' /* $str はインターセプトされる単語です...
;