漢字エンコーディング研究シリーズの第3回目となるPHP関数編では、ord()関数とchr()関数の応用をマスターしました。 前回【PHP基礎編 ASCIIコード比較表と文字変換の詳細解説】で学習しました。 ASCIIコードと文字変換の方法について説明しましたが、実際に使ってみると、文字変換には文字と10進数間の変換に使用するord()関数と、文字を10進数に変換する2つの特殊な関数が必要であることがわかりました。 chr() 関数は、10 進数を文字に変換します。2 進数では、8 進数、10 進数、16 進数の間のブリッジとして機能します。
1. ord() 関数の応用 ord() 関数は、文字の ASCII 値を返すために使用されます。ord('a') が返す ASCII 値を取得します。実際の開発では、最も一般的に使用されるものは、漢字の上位桁と下位桁の 10 進数を取得する文字インターセプト関数で使用されます。たとえば、一般的な漢字インターセプト関数の場合は、substrs() 関数または Cutstr() が使用されます。 PHPWind または Discuz! Forum のソース コードの関数では、戻り値が 127 より大きい場合は、文字の ASCII コード値を取得します。 、そして後半を取得して結合し、GBK や UTF-8 などの文字エンコーディングと組み合わせて完全な文字にします。
ord() 関数を使用して漢字を判定し、各漢字の ASCII 値を返す GBK エンコーディングを例に挙げます。コードは次のとおりです
コードをコピーします コードは次のとおりです。
$string = "私に執着しないでください";
$ length = strlen($string);
var_dump($string);//オリジナルの中国語
var_dump($length);//Length
$result = array();
for($i=0;$iif(ord($string[$i])>127){
$result[] = $string[$i ].' '.$string[++$i];
}
}
var_dump($result);
コードの説明
1、値が文字列である変数 $string を定義します
2、長さを取得します変数 (バイト数)
3 を出力し、変数と変数の長さ
4 を出力し、for ループを通じて変数の各バイト値を取得し、スペースで区切られた 2 バイトの漢字を表示します。
結果は以下の通りです
イラスト
:「兄貴に執着しないでください」は漢字5文字、合計10バイト(漢字1文字は2バイト)であり、各バイトを個別に印刷することはできません。上記のように正常に表示されます
Initial 値は変更されず、各バイトの ASCII 値を表示するように for ループ内のコードが変更されます
コードをコピーします コードは次のとおりです:
$result = array();
for($i=0;$iif(ord($string[$i])>127){
$result[] = ord($string[ $i]).' '.ord($string[++$i]) ;
}
}
var_dump($result);
上記のコードは、ord() 関数を使用してそれぞれの ASCII 値を出力します。結果は以下の通りです
ord()関数による変換後は、各文字のASCII値が正常に表示されます。
2. chr() 関数の応用
chr() 関数は ord() 関数の逆で、chr(97) が a を返すように、指定された文字を返すために使用されます。
上記の例と組み合わせると、漢字の ASCII 値が取得される限り、chr() 関数を通じて漢字を組み立てることができます。 コードは次のとおりです
コードをコピーします は次のとおりです:
$string = "兄に執着しないでください ";
$length = strlen($string);//オリジナルの中国語
var_dump($length);//長さ
$result = array();
for($i=0;$ iif(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
foreach($result as $v){
$decs =爆発(" ",$v);
エコー chr($decs[0] ).chr($decs[1]);
結果は以下の通りです
上記のコードは漢字を直接出力するのではなく、通常の漢字を出力します。原則として、まず各バイトの ASCII 値を取得し、それを chr() を通じてバイトに変換します。関数を使用して、2 つのバイトを変換して、完全な漢字を形成します。
ord() 関数と chr() 関数の説明を通じて、私たちは最初に漢字のエンコード原理を理解し、GBK エンコードでは 1 つの漢字が 2 バイトであることを理解し、ord() 関数と chr() 関数を使用しました。各バイトの変換方法を実装するには、次号の漢字コード研究シリーズの漢字コード変換の原理に注目してください。
参考文献
PHPWind と Discuz のインターセプト文字関数 substrs と Cutstr のパフォーマンス比較
http://www.bkjia.com/PHPjc/324709.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/324709.html技術記事漢字エンコーディング研究シリーズの第3回目となるPHP関数編では、ord()関数とchr()関数の応用をマスターしました。 前回【PHP基礎編 ASCIIコード比較表と文字変換の詳細解説】で学習しました。 ASCIIコードと文字変換について...