phpのunicodeとutf 8コードについて簡単に話してください。


unicodeとutf 8コードを再認識します。
今日まで正確に言えば、先ほどです。UTF-8コードとユニックコードは違います。違いがあります。
彼らの間には一定の連絡があります。その違いを見てください。
UTF-8の長さは一定ではなく、1、2、3バイトかもしれません。
Unicodeの長さは一定で、2バイト(USC-2)
UTF-8はUnicodeと相互に変換できます。
unicodeとutf 8の関係
ユニック(16進)
UTF-8(バイナリ)
0000-007 F 0 xxxxx
0080-07 FF 110 xxxx 10 xxxxxx
0800-FFFF 1110 xxxxx 10 xxxxxxxxx
上の表は2つの意味があります。最初はUnicodeとUTF-8の文字範囲の対応です。もう一つはUnicodeがどのようにUTF-8と変換されているかが分かります。
UTF-8からUnicodeへの変換を先に言います。
UTF-8符号化のバイナリと上の3つのフォーマットをマッチングして固定ビット(表の非x位置)を削除し、右から左に8人ずつのグループにします。8桁未満の左はリードしません。2バイトの16 bittsになります。この16 bittsはUTF-8対応のUniodeコードです。以下のいくつかの例を見てください。

上の写真の文字コードのフォーマットはUTF-8で、WinHexでその16進数の表示を見ることができます。

 => UTF-8   => UTF-8 => 16 => 16

 => E6B189 => 11100110 10110001 10001001 => 01101100 01001001 => 6C49
 => E5AD97 => 11100101 10101101 10010111 => 01011011 01010111 => 5B57

# chrome
'\u6C49'
" "
'\u5B57'
" "

# , UTF-8 Unicode ,
,11100110
UTF-8 , ,3
2 11100101 10101101 10010111
     1011011 01010111
16 ,     01011011 01010111  => 5B57

ユニフォームからUTF-8への変換を見てください。

5B57
5B57 Unicode ,0800 <= 5B57 <= FFFF, 5B57 UTF-8 , 1110xxxx 10xxxxxx 10xxxxxx
5B57 101101101010111
UTF-8 11100101 10101101 10010111
問題を話す
それに今日の問題の原因は、先端から多くの単語を入力して、UTF-8フォーマットの単語は最大30バイトです。だから、フロントエンドとバックグラウンドでそれぞれ検証します。javascriptはユニックコードを使っています。バックエンドのプログラムはUTF-8コードを使っています。今の解決方法はこのようにしています。
先端

function utf8_bytes(str)
{
 var len = 0, unicode;
 for(var i = 0; i < str.length; i++)
 {
 unicode = str.charCodeAt(i);
 if(unicode < 0x0080) {
  ++len;
 } else if(unicode < 0x0800) {
  len += 2;
 } else if(unicode <= 0xFFFF) {
  len += 3;
 }else {
  throw "characters must be USC-2!!"
 }
 }
 return len;
}

#  
utf8_bytes('asdasdas')
8
utf8_bytes('yrt   ')
12

楽屋

#  GBK   
$len = ceil(strlen(bin2hex(iconv('GBK', 'UTF-8', $word)))/2);
#  UTF8   
$len = ceil(strlen(bin2hex($word))/2);
以上述べましたが、本文の内容は全部です。お好きになってください。