中国語の文字列のソートで問題が発生しました。プログラムは、任意の文字列の最初の文字を取得することができます。
原則として、gb2312 エンコードはピンインでソートされています。gb2312 に慣れていない場合は、エンコード方法を確認してください。
出典:
http://www.phpman.cn
-
- $limit=array( //gb2312 ピンイン並べ替え
- array(45217,45252), //A
- array(45253,45760), //B
- array(45761,46317), //C
- 配列(46318,46825), //D
- 配列(46826,47009), //E
- 配列(47010,47296), //F
- 配列(47297,47613), //G
- 配列( 47614,48118), //H
- 配列(0,0), //I
- 配列(48119,49061), //J
- 配列(49062,49323), //K
- 配列(49324,49895), / /L
- 配列(49896,50370), //M
- 配列(50371,50613), //N
- 配列(50614,50621), //O
- 配列(50622,50905), //P
- 配列(50906) ,51386), //Q
- 配列(51387,51445), //R
- 配列(51446,52217), //S
- 配列(52218,52697), //T
- 配列(0,0), // U
- 配列(0,0), //V
- 配列(52698,52979), //W
- 配列(52980,53688), //X
- 配列(53689,54480), //Y
- 配列(54481, 55289), //Z
- );
-
- $str="A: これはテスト プログラム 1";
- $str= iconv("UTF-8","gb2312", $str);
- echo $str. "";
- $i=0;
- while($i $tmp=bin2hex(substr($str,$i,1));
- if($tmp> ;='B0'){ //漢字の始まり
- $t=getLetter(hexdec(bin2hex(substr($str,$i,2))));
- printf("%c",$t== -1 ? '*' : $t );
- $i+=2;
- }
- else{
- printf("%s",substr($str,$i,1));
- $i++;
- }
- }
-
- function getLetter($num){
- global $limit;
- $char_index=65;
- foreach($limit as $k=>$v){
- if($num>=$v[0] && $num< ;= $v[1]){
- $char_index+=$k;
- return $char_index;
- }
- }
- return -1;
- }
- ?>
コードをコピー
|