0){ if([c"/> 0){ if([c">

ホームページ  >  記事  >  バックエンド開発  >  php UTF8中国語文字列インターセプトを自分で実装する

php UTF8中国語文字列インターセプトを自分で実装する

WBOY
WBOYオリジナル
2016-06-13 13:10:41758ブラウズ

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 を使用して、それらが中国語かどうかを判断できます。

文章が汚いかもしれません。必要に応じて注意してお読みください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。