この記事では主にphpで中国語と英語の文字列を文字化けせずにインターセプトする方法を紹介します。非常に実用的な価値がありますので、必要な方は参考にしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
//$str インターセプトされる文字列 //$len はインターセプトされた文字数です //$chars インターセプトされた文字数 //$res 保存された文字列 //$chars はインターセプトされた文字列の数を保存します //$offset インターセプトされたオフセット //$length 文字列内のバイト数 //$str の文字数が $len> の場合、無意味な while ループが発生します ($offset 関数 utf8sub($str,$len){ if($len 戻る; } $res=""; $オフセット=0; $chars=0; $length=strlen($str); while($chars $hign=decbin(ord(substr($str,$offset,1))); if(strlen($hign) $count=1; }elseif(substr($hign,0,3)=="110"){ $count=2; }elseif(substr($hign,0,4)=="1110"){ $count=3; }elseif(substr($hign,0,5)=="11110"){ $count=4; }elseif(substr($hign,0,6)=="111110"){ $count=5; }elseif(substr($hign,0,7)=="1111110"){ $count=6; } $res.=substr($str,$offset,$count); $オフセット+=$カウント; $chars+=1; } $res を返す; } 関数 utf8sub1($str,$len){ $chars=0; $res=""; $オフセット=0; $length=strlen($str); while($chars $hign=decbin(ord(substr($str,$offset,1))); if(strlen($hign) $count=1; }elseif($hign & "11100000"=="11000000"){ $count=2; }elseif($hign & "11110000"=="11100000"){ $count=3; }elseif($hign & "11111000"=="11110000"){ $count=4; }elseif($hign & "11111100"=="11111000"){ $count=5; }elseif($hign & "11111110"=="11111100"){ $count=6; } $res.=substr($str,$offset,$count); $chars++; $オフセット+=$カウント; } $res を返す; } $a="中华ああ人hdj"; echo utf8sub($a,5); ?> |
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。