php UTF8 中国語文字列インターセプトを自分で実装する
header("Content-type: text/html; charset=utf-8");
function my_substr($str,$begin,$length){
$i = $begin;
$result="";
while($length > 0){
if([color=red]ord($str[$i])>127[/color]){
$result .= substr($str,$i,3);
$i = $i+3;
}else{
$result .= substr($str,$i,1);
$i++;
}
$length--;
}
return $result;
}
$chinese = "中a国people";
echo "<br>".my_substr($chinese,0,3);
出力結果は次のとおりです: China a
説明:
命令は文字の ASSIC 値を削除することです。
chr は assic から文字を取得します。
なぜ assic が 127 より大きいと判断されるのですか?
ASSIC コード表は次のとおりです
http://www.asciitable.com/
当初、コンピューターには文字を表現するために使用された ASSIC コーディングしかありませんでした。 ASSIC 文字は 1 バイトで表されます。したがって、ASSIC には最大でも 256 個の組み合わせしかありません。英語には十分ですが、中国語、日本語、韓国語、その他のアジアの言語には十分ではありません。
その場合、中国語の文字を表すために複数の BYTE を使用することのみを検討できます。たとえば、GB2312 は中国語の文字を表すために 2 バイトを使用します。ラップトップを使用して Windows で新しい TXT を作成し、ASSIC として保存します。簡体字中国語オペレーティング システムを使用している場合、TXT 内の中国語は GB2312 に保存されます。文字列をインターセプトする上記のプログラム $result .= substr($str,$i,3); では、その中の 3 を 2 に変更する必要があります。同時にヘッダーも変更することを忘れないでください。 GB2312 または UTF8 に関係なく、ASSIC 128 より前の A ~ Z などを表します。これらは BTYE で表され、可変長エンコーディングです。したがって、ASSIC を使用して、それらが中国語かどうかを判断できます。
文章が汚いかもしれません。必要に応じて注意してお読みください。