トピック: UTF-8 エンコードされた文字列を GB2312 エンコードに変換し、対応するエンコードを持たない文字列を DEC; 形式に変換します。 회=>회
など 言語: PHP、Javascript
コンテンツ: ブラウザーは Javascript の encodeURI 関数を使用して文字列 (GB2312 以外の文字を含む) をエンコードし、サーバー、ページ エンコーディング どちらも GB2312 であり、サーバーの PHP スクリプトはリクエスト データを GB2312 表現に変換します。
基本:
1. iconv 関数を使用するだけでは GB2312 文字のみを変換でき、外国文字は変換できません
2. 使用する既製の関数はありません
3. binding() 関数: バイナリ形式の「01」文字列を 10 進数に変換します
4. decbin() 関数: 10 進数を decbin(224)="11100000" などのバイナリ文字列に変換します
アイデア: UTF-8 にはそれぞれ 1、2、3 バイトのエンコーディングがあり、中国語、日本語、韓国語はすべて 3 バイトのエンコーディングであるため、バイト数は 1 バイト目のサイズに応じて区別されます。処理中の文字エンコーディング。
1. 最初のバイトが 128 未満の場合、ASCII コードです。
2. 128 ~ 192、非 UTF-8 エンコードで、ord();
として処理されます。 . 192~224、2 バイトの UTF-8 エンコード
4. 224~240、3 バイトのエンコード
5. 240~248、4 バイトのエンコード
6. . 。 。
7. iconv を使用して 3 バイトエンコーディングを GB2312 に変換します
8. GB2312 以外のマルチバイト文字の場合は、UTF-8 を Unicode に変換してから、Unicode 10 進値を取得してください
9.ビット演算の使用を検討することも、bindec() 関数
を使用することもできます。 プログラム:
function GetGB2312String($name)
{
$tostr = "";
for ($i=0;$i
$curbin = ord(substr($name,$i,1));
if( $curbin < 0x80)
{
$tostr .= substr($name,$i,1);
}elseif($curbin < bindingc("11000000")){
$ str = substr ($name,$i,1);
$tostr .= "".ord($str).";";
}elseif($curbin < bindingc("11100000") )){
$str = substr($name,$i,2);
$tostr .= "".GetUnicodeChar($str).";";
$i += 1 ;
}elseif($curbin
$gstr= iconv("UTF-8", "GB2312" ,$str);
if(!$gstr)
{
$tostr .= "".GetUnicodeChar($str).";";
}else{
$ tostr .= $gstr;
}
$i += 2;
}elseif($curbin < bindingc("11111000")){
$str = substr ($name ,$i,4);
$tostr .= "".GetUnicodeChar($str).";";
$i += 3;
}elseif( $curbin $str = substr($name,$i,5);
$tostr .= "".GetUnicodeChar($str).";" ;
$i += 4;
}else{
$str = substr($name,$i,6);
$tostr .= "".GetUnicodeChar( $str) .";";
$i += 5;
}
}
return $tostr;
}
function GetUnicodeChar ($str )
{
$temp = "";
for($i=0;$i
$x = decbin (ord(substr($str,$i,1)));
if($i == 0)
{
$s = strlen($str)+1;
$temp .= substr ($x,$s,8-$s);
}else{
$temp .= substr($x,2,6);
}
}
return binding ($temp); U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U -7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx