91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中unicode和utf8編碼的區別是什么

發布時間:2020-12-14 15:55:01 來源:億速云 閱讀:159 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關php中unicode和utf8編碼的區別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

重新認識unicode和utf8編碼

他們之間是有一定的聯系的,看看他們的區別:
UTF-8的長度是不一定的,有可能是1、2、3字節
Unicode長度一定,2個字節(USC-2)
UTF-8可以和Unicode互相轉換

unicode和utf8的關系

Unicode(16進制)

UTF-8(二進制)

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

上面的表格有2個意思,第一個顯而易見就是說Unicode和UTF-8字符范圍的對應,還有一個可以看出Unicode怎么和UTF-8互相轉換:

先說UTF-8到Unicode的轉換

UTF-8編碼的二進制和上面的3種格式進行匹配,匹配到之后去掉固定位(表格中的非x位置),然后從右到左每8位一組,不夠8位左邊不領,湊夠2個字節16 bits,這16 bits所表示的就是UTF-8對應的Unicode編碼,看看下面幾個例子:

php中unicode和utf8編碼的區別是什么

上面圖片中的文字編碼格式為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

再看看從Unicode到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用的是Unicode編碼,后端程序用的是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);

看完上述內容,你們對php中unicode和utf8編碼的區別是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌拉特中旗| 建湖县| 二连浩特市| 平泉县| 宁德市| 云梦县| 奉节县| 竹北市| 广南县| 龙州县| 广德县| 镇江市| 泾阳县| 浦城县| 大宁县| 萨迦县| 湘潭市| 乌苏市| 恩平市| 池州市| 揭东县| 福海县| 霍州市| 万安县| 麦盖提县| 海伦市| 佛山市| 惠水县| 旅游| 玉屏| 高台县| 丽江市| 琼结县| 龙川县| 泸州市| 南澳县| 蒙阴县| 大城县| 门头沟区| 剑川县| 平舆县|