ホームページ > php教程 > php手册 > UTF-8 から GB2312 への変換の完全な処理

UTF-8 から GB2312 への変換の完全な処理

WBOY
リリース: 2016-06-21 08:59:30
オリジナル
1183 人が閲覧しました

トピック: 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 $str = substr($name,$i,3);
$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-00200000 - U-03FFFFFF : 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

U-04000000 - U -7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx






関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート