ホームページ > php教程 > php手册 > PHP utf-8 から Unicode 関数への変換 ページ 1/2

PHP utf-8 から Unicode 関数への変換 ページ 1/2

WBOY
リリース: 2016-06-13 12:28:48
オリジナル
880 人が閲覧しました

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 文字列が認識されません。 ", $ucs2_ysdata);
// utf8 ファイルを書き込みます
$utf8data = unicodeToUtf8($ucs2data); // 20:52。文字列を utf8 コードに戻します。
$rt = file_put_contents ( " utf8.txt", $utf8data);
echo(urlencode($utf8data));echo("");
$esc = utf8Escape($data) ;
echot($esc);
$esc = phpEscape($data);
echot($esc);
echot($unesc ); /
関数 utf8ToUnicode($str,$order="little")
{
$ucs2string ="";
$n=strlen( $str); 0;$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 を返します。
*
*/
関数 unicodeToUtf8($str,$order="little")
{
$utf8string ="";
$n=strlen($str);
for ($i=0;$i は元に変換されます。
$i ; //2 バイトは Unicode 文字を表します。
$c = "";
if($val utf8string . = $c;
}
return $utf8string;
} // end func

/*
* utf8 でエンコードされた文字列を Unicode パターンにエンコードします。これは、エスケープ * utf8 コードのみを受け入れる理由は、utf8 コードと unicode の間の変換は公式のみであるためです。
* の規則が正しいかどうかはわかりません。
* utf2ucs を呼び出して各文字のコード値を計算するのは非効率ですが、
*/ <. function utf8escape>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 でエンコードされた文字
* 文字の Unicode コード値を返します。コード値は chr を使用して取得できます。
*
* 原理: Unicode を utf-8 コードに変換するアルゴリズムは、この関数です。
*/
function utf2ucs($str){
$n=strlen($str);
if ($n=3) {
$highCode = ord($str[0 ]);
$midCode = ord($str[1]);
$a = 0x1F & $highCode; 0x7F & $midCode;
$c = 0x7F & $lowCode;
}
elseif; {
$highCode = ord($str[0]);
$lowCode = ord($str[1]);
$a = 0x3F & $highCode;
$b = 0x7F & $lowCode; //0x7F は 0x80 の補数です
$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 として $val){
if (substr($val,0,1) ! ="%") { //英数字の場合 - _.
$c .=$val
}
elseif (substr($val,1,1)!= "u ") { //非英数字の場合 -_.ASCII コード
$x = hexdec(substr($val,1,2)); ;
}
else { //0xFF より大きいコードの場合
$val = intval(substr($val,2),16);
if($val %u". bin2hex( iconv( 'gbk ' ,"UCS-2",$chars[$i].$chars[$i 1] ) ); >$ar を返します
}
?>

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