成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 高級(jí)面試題 - 如果沒(méi)有 mb 系列函數(shù),如何切割多字節(jié)字符串

bawn / 2769人閱讀

摘要:它可以使用個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度。對(duì)于字節(jié)的符號(hào),第一個(gè)字節(jié)的前位都設(shè)為,第位設(shè)為,后面字節(jié)的前兩位一律設(shè)為。剩下的沒(méi)有提及的二進(jìn)制位,全部為這個(gè)符號(hào)的碼。

原文請(qǐng)關(guān)注我的博客 https://mengkang.net/1129.html
很多工程師在工作1~3年的時(shí)候最容易遇到瓶頸,不知道自己應(yīng)該學(xué)習(xí)什么,面試總是吃閉門(mén)羹。那么 PHP 后面應(yīng)該怎么學(xué)呢?安利一波我的系列直播 PHP 進(jìn)階之路
需求

如果需要將可能含有中文的字符串進(jìn)行拆分成數(shù)組,我們下面以 utf-8 編碼為例。

解決方案一

我習(xí)慣的方法可能是:

mb_internal_encoding("UTF-8");

$str = "周夢(mèng)康";

$array = [];
for ($i=0,$l = mb_strlen($str); $i < $l; $i++) { 
    array_push($array, mb_substr($str, $i, 1, "utf-8"));
}

var_export($array);

假如我們沒(méi)裝mb擴(kuò)展怎么辦?

解決方案二

今天看到一份代碼,別人是這么寫(xiě)的:

function str_split_utf8($str)  
{  
    $split = 1;  
    $array = array();  
    for ($i = 0; $i < strlen($str);) {  
        $value = ord($str[$i]);  
        if ($value > 127) {  
            if ($value >= 192 && $value <= 223) {  
                $split = 2;  
            } elseif ($value >= 224 && $value <= 239) {  
                $split = 3;  
            } elseif ($value >= 240 && $value <= 247) {  
                $split = 4;  
            }  
        } else {  
            $split = 1;  
        }  
        $key = null;  
        for ($j = 0; $j < $split; $j++, $i++) {  
            $key .= $str[$i];  
        }  
        array_push($array, $key);  
    }  
    return $array;  
}  
代碼解讀

strlen計(jì)算的是字節(jié)數(shù),而直接使用$str[x]就沿用了c語(yǔ)言里面char數(shù)組和字符串的習(xí)慣,表示按字節(jié)來(lái)讀取$str,也就是說(shuō)每次讀取的數(shù)據(jù)的ascii碼值不可能大于255。而php里使用ord來(lái)獲取ascii碼值。

切割規(guī)則如下
ascii 碼范圍 切割偏移量
0 ~ 127 1 字節(jié)
192 ~ 223 2 字節(jié)
224 ~ 239 3 字節(jié)
240 ~ 247 4 字節(jié)
為什么呢?
http://www.ruanyifeng.com/blo...
https://segmentfault.com/a/11... 口語(yǔ)化敘述 utf-8 的來(lái)歷
Unicode

Unicode 只是一個(gè)符號(hào)集,它只規(guī)定了符號(hào)的二進(jìn)制代碼,卻沒(méi)有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ)。

UTF-8

UTF-8 就是在互聯(lián)網(wǎng)上使用最廣的一種 Unicode 的實(shí)現(xiàn)方式。UTF-8 最大的一個(gè)特點(diǎn),就是它是一種變長(zhǎng)的編碼方式。它可以使用1~4個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度。

UTF-8 的編碼規(guī)則很簡(jiǎn)單,只有二條:

對(duì)于單字節(jié)的符號(hào),字節(jié)的第一位設(shè)為0,后面7位為這個(gè)符號(hào)的 Unicode 碼。因此對(duì)于英語(yǔ)字母,UTF-8 編碼和 ASCII 碼是相同的(能容納0~127)。

對(duì)于n字節(jié)的符號(hào)(n > 1),第一個(gè)字節(jié)的前n位都設(shè)為1,第n + 1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒(méi)有提及的二進(jìn)制位,全部為這個(gè)符號(hào)的 Unicode 碼。

下表總結(jié)了編碼規(guī)則,字母x表示可用編碼的位:

Unicode 符號(hào)范圍(十六進(jìn)制) UTF-8 編碼方式(二進(jìn)制) UTF-8 首字節(jié)范圍
0000 0000-0000 007F 0xxxxxxx 0 ~ 127
0000 0080-0000 07FF 110xxxxx 10xxxxxx (128+64) ~ (255-32) 也就是 192 ~ 223
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx (128+64+32) ~ (255-16) 也就是 224 ~ 239
0001 0000-0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (128+64+32+16) ~ (255-8) 也就是 240 ~ 247

想必看了這個(gè)表,大家就能明白了吧。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26305.html

相關(guān)文章

  • Java開(kāi)發(fā)

    摘要:大多數(shù)待遇豐厚的開(kāi)發(fā)職位都要求開(kāi)發(fā)者精通多線程技術(shù)并且有豐富的程序開(kāi)發(fā)調(diào)試優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問(wèn)題在面試中經(jīng)常會(huì)被提到。將對(duì)象編碼為字節(jié)流稱之為序列化,反之將字節(jié)流重建成對(duì)象稱之為反序列化。 JVM 內(nèi)存溢出實(shí)例 - 實(shí)戰(zhàn) JVM(二) 介紹 JVM 內(nèi)存溢出產(chǎn)生情況分析 Java - 注解詳解 詳細(xì)介紹 Java 注解的使用,有利于學(xué)習(xí)編譯時(shí)注解 Java 程序員快速上手 Kot...

    LuDongWei 評(píng)論0 收藏0
  • PHP面試常考內(nèi)容之Memcache和Redis(1)

    摘要:以下正文的部分內(nèi)容來(lái)自程序員面試筆試寶典書(shū)籍,如果轉(zhuǎn)載請(qǐng)保留出處一什么是是一個(gè)開(kāi)源免費(fèi)高性能的分布式對(duì)象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵值對(duì)的來(lái)存儲(chǔ)數(shù)據(jù)到內(nèi)存中。預(yù)告面試??純?nèi)容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發(fā)布的PHP面試??純?nèi)容之面向?qū)ο髮n}后,發(fā)布的第二個(gè)專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)...

    wenyiweb 評(píng)論0 收藏0
  • PHP面試常考內(nèi)容之Memcache和Redis(1)

    摘要:以下正文的部分內(nèi)容來(lái)自程序員面試筆試寶典書(shū)籍,如果轉(zhuǎn)載請(qǐng)保留出處一什么是是一個(gè)開(kāi)源免費(fèi)高性能的分布式對(duì)象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵值對(duì)的來(lái)存儲(chǔ)數(shù)據(jù)到內(nèi)存中。預(yù)告面試??純?nèi)容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發(fā)布的PHP面試??純?nèi)容之面向?qū)ο髮n}后,發(fā)布的第二個(gè)專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)...

    nanfeiyan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

bawn

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<