UTF エンコード
UTF-8 は、UCS を 8 ビット単位でエンコードします。 UCS-2 から UTF-8 へのエンコード方法は次のとおりです。
UCS-2 エンコード(16 進数)
UTF-8 バイトストリーム(バイナリ)
0000 - 007F
0xxxxxxx
0080 - 07FF
110xxxxx 10xxxxxx
0800 - FFFF
1110xxxx 10xxxxxx 10xxxxxx
たとえば、「中国語」文字の Unicode エンコードは 6C49 であり、6C49 は 0800 から FFFF の間にあるため、3 バイトのテンプレートを使用する必要があります: 1110xxxx 10xxxxxx 10xxxxxx。 6C49 をバイナリで書くと、0110 110001 001001 となります。このビット ストリームを使用してテンプレート内の x を順番に置き換えると、11100110 10110001 10001001、つまり E6 B1 89 が得られます。
ついにunicodeとutf8間の変換が完了しました。
utf-8でエンコードされた文字chが3バイトの場合。 xx yy zz
AND xx と 1F で a を取得
AND yy と 7F で b を取得
AND zz と 7F で c を取得
(64a+b)*64+c = ch (Unicode エンコーディング)
echo.php何もない。ほんの少しの機能です。
");
//Unicode ファイルの書き込み
$ucs2data = utf8ToUnicode($data,"little");
$endian = chr(0xFE).chr(0xFF);
$endian = chr(0xFF).chr( 0xFE );
$rt = file_put_contents ("ucs2.txt", $endian.$ucs2data);
//19:32、utf8toUnicode 関数は成功しました
//20:09。 . .
//ビッグ エンディアン モードで保存された Unicode 文字列は ue または editplus では認識できません。
//utf8 ファイル
$utf8data = unicodeToUtf8 ucs2data); // 20:52。文字列を utf8 コードに変換します。
$rt = file_put_contents ( "utf8.txt", $utf8data);
$esc = utf8Escape($data);
$esc = phpEscape($esc); ;
/**
* この関数は、utf8 エンコードされた文字列を Unicode エンコードされた文字列に変換します。
* パラメータ str、utf8 エンコードされた文字列。
* パラメータの順序、データの格納形式、ビッグ エンディアンかリトル エンディアンか、デフォルトの Unicode 格納順序は少です。
* 例: 「big」の Unicode コードは 5927 です。リトル モードのストレージは 27 59 です。ビッグ モードでは、順序は変更されません: 59 27.
* リトル フォーマット ファイルの先頭には FF FE が必要です。ビッグフォーマットで保存されたファイルは FE FF で始まります。さもないと。深刻な混乱が生じるだろう。
* この関数は文字を変換するだけであり、ヘッダーの追加は行いません。
* iconvで変換された文字列はビッグエンディアンで格納されます。
* 変換された文字列である ucs2string を返します。
* 小言をありがとう (xuzuning)
*/
function utf8ToUnicode($str,$order="little")
{
$n=strlen($str ); ;$i0x80) { //110xxxxx 10xxxxxx
$a = (ord($str[$i]) & 0x3F )0x80 && ord($str[$i+2])> 0x80) { //1110xxxx 10xxxxxx 10xxxxxx
$a = (ord($str[$i]) & 0x1F) utf8 エンコード文字列に変換します
* パラメータ str、unicode エンコード文字列
* パラメータ順序、unicode 文字列 格納順序はビッグ エンディアンまたはリトル エンディアンです
* を返します。 utf8string、変換された文字列。
*
*/
function unicodeToUtf8($str,$order="little")
{
$utf8string =""
$n=strlen($str); .
$i++; // 2 バイトは Unicode 文字を表します。
$c = ""
}
return $utf8string;
} // 関数を終了します
/ *
* utf8 でエンコードされた文字列をエスケープに相当する Unicode パターンにエンコードします
* utf8 コードのみが受け入れられる理由は、utf8 コードと Unicode の間の変換は数式のみであり、他のコードはコード テーブルを参照して変換する必要があるためです
. * utf8 コードを見つける通常の方法が完全に混乱しているかどうかはわかりません
* ただし、コードは明確なので、あまり効率的ではありません。
*/
function utf8Escape($str) {
preg_match_all("/[\xC0-\xE0].|[\xE0-\xF0]..|[\x01-\] が埋め込まれています。 x7f]+/", $str,$r);
//prt($r);
$ar = $r[0];
foreach($ar as $k=>$v) {
$ord = ord($v[0]);
if( $ordutf8 コード
$ar[$k] = "%u".utf2ucs($v);
}
elseif ($ordutf8 コード
$ar[$k] = "%u".utf2ucs($v);
}
}//foreach
return join("",$ar);
/**
*
* utf8 エンコードされた文字を ucs-2 エンコードに変換します
* パラメーター utf8 でエンコードされた文字
* コード値がわかったら、chr を使用して文字を取得できます。
*
* 原理: Unicode を utf-8 コードに変換するアルゴリズムは次のとおりです。 . .
このプロセスの逆のアルゴリズムがこの関数であり、ヘッドが固定され、反転されます。
*/
function utf2ucs($str){
$n=strlen($str);
if ($n=3) {
$highCode = ord($str[0]);
$midCode = ord($) str[1]);
$a = 0x1F & $highCode
$c = 0x7F & $ucsCode; (64*$a + $b)*64 + $c;
}
elseif ($n==2) {
$highCode = ord($str[0]);
$lowCode = ord($str[1]) ]);
$a = 0x3F & $highCode; //0x3F は 0xC0$b = 0x7F & $lowCode の補数です
$ucsCode = 64*$a + $b; }
elseif($n==1) {
$ucscode = ord($str);
}
return dechex($ucsCode);
}
/*
* 使用法: この関数はエスケープ関数を反転するために使用されます。 JavaScript エンコードされた文字。
* キーの通常の検索に問題があるかどうかはわかりません
* パラメータ: JavaScript でエンコードされた文字列。
* 例: unicodeToUtf8("%u5927")= big
* 2005-12-10
*
*/
function phpUnescape($escstr){
preg_match_all("/%u[0-9A-Za-z] { 4}|%.{2}|[0-9a-zA-Z.+-_]+/",$escstr,$matches); //prt($matches);
$ar = &$matches[ 0 ];
$c = "";
foreach($ar as $val){
if (substr($val,0,1)!="%") { //英数字+-_の場合. Code
$c .=$val;
}
elseif (substr($val,1,1)!="u") { //非英数字の場合
$x = hexdec(substr ($val,1,2));
$c .=chr($x);
}
else { //0xFF より大きいコードの場合
$val = intval($val, 2),16) ;
if($val %u".bin2hex( iconv( 'gbk' ,"UCS-2",$chars[$i].$chars[$i+1] ) );
$i++ ;
}
} //foreach
return $ar
?>
http://www.bkjia.com/PHPjc/319074.html
www.bkjia.com
true