ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルで Unicode と utf8 エンコーディングについて簡単に説明します。

php_PHP チュートリアルで Unicode と utf8 エンコーディングについて簡単に説明します。

WBOY
WBOYオリジナル
2016-07-13 09:51:19971ブラウズ

phpのUnicodeとutf8エンコーディングについて簡単に説明します

Unicodeとutf8エンコーディングを再理解します

今日まで、正確に言うと、たった今、UTF-8エンコーディングとUnicodeエンコーディングが異なる、違いがあることを知りませんでした
それらの間には特定のつながりがあります。違いを見てください:
UTF-8 の長さは定かではなく、1、2、または 3 バイトである可能性があります
Unicode には特定の長さ、2 バイト (USC-2) があります
UTF-8 は Unicode との間で変換できます

Unicodeとutf8の関係

ユニコード(16)

UTF-8(バイナリ)

0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx

上の表には 2 つの意味があります。1 つは明らかに Unicode と UTF-8 の文字範囲の対応関係であり、もう 1 つは Unicode と UTF-8 が相互に変換される方法を示しています。

最初にUTF-8からUnicodeへの変換について話しましょう

UTF-8 でエンコードされたバイナリは、上記の 3 つの形式と照合されます。照合後、固定ビット (テーブル内の x 以外の位置) を削除し、8 ビットが足りない場合は、右から左へ 8 ビットごとにグループ化します。左側は取得されません。これらの 16 ビットは、UTF-8 に対応する Unicode エンコーディングを表します。

简单谈谈php中的unicode和utf8编码 帮客之家上の図のテキストエンコーディング形式はUTF-8であり、WinHexを使用してその16進表現を確認できます

コードは次のとおりです:

文字 => UTF-8 => UTF-8 バイナリ => 16 ビット バイナリ =>

汉 => E6B189 => 11100110 10110001 10001001 => 01101100 01001001 => 6C49

単語 => E5AD97 => 11100101 10101101 10010111 =>

#以下はChromeコマンドラインで実行した結果です
「u6C49」

「ハン」

「u5B57」
「言葉」

#この時点で、UTF-8 から Unicode への変換はすでに非常に簡単な作業になっています。変換の疑似コードを見てください。 1バイト読んで、11100110
3 番目のタイプである 3 バイトに属する UTF-8 文字の形式を決定します

続きを読む 2 バイトで 11100101 10101101 10010111 を取得します

1011011 01010111
の形式に従って固定ビットを削除します。 16 桁が足りません。左側にゼロを追加してください 01011011 01010111 => 5B57



Unicode から UTF-8 への変換をもう一度見てください

コードをコピーします。コードは次のとおりです:

5B57

5B57 が位置する Unicode 範囲 0800 5B57 101101101010111 のバイナリ エンコーディングを取得します

前の手順でバイナリ エンコーディングを使用して、UTF-8 エンコーディングを右から左に 11100101 10101101 10010111 につなぎ合わせます



問題について話す

今日の問題の原因について話しましょう。UTF-8 形式では多くの単語が入力されるため、フロントエンドとバックエンドでそれぞれ検証が行われます。 Unicode エンコードとバックエンド プログラムは UTF-8 エンコードを使用します。現在の解決策はこれです

フロントエンド

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

関数 utf8_bytes(str)
{

var len = 0、ユニコード;

for(var i = 0; i

{

unicode = str.charCodeAt(i);

if(unicode

++レン;

} else if(unicode

レン += 2;

} else if(unicode

レン += 3;

}その他{

「キャラクターは USC-2 でなければなりません!!」をスローします

}

}

レンを返します;

}

#例

utf8_bytes('asdasdas')

8

utf8_bytes('yrtyanruitao')

12

舞台裏

1

2

3

4

#GBK文字列の場合

$len = ceil(strlen(bin2hex(iconv('GBK', 'UTF-8', $word)))/2);

#UTF8文字列の場合

$len = ceil(strlen(bin2hex($word))/2);

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1014274.html技術記事 php における Unicode と utf8 エンコーディングについて簡単に説明します。Unicode と utf8 エンコーディングを再理解します。今日まで、正確に言うと、UTF-8 エンコーディングと Unicode エンコーディングには違いがあることを知りませんでした。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。