<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 需求 如果需要將可能含有中文的字符串進行拆分成數組,我們下面以 utf-8 編碼為例。 # 解決方案一 我習慣的方法可能是: ``` mb_internal_encoding("UTF-8"); $str = "周夢康"; $array = []; for ($i=0,$l = mb_strlen($str); $i < $l; $i++) { array_push($array, mb_substr($str, $i, 1, "utf-8")); } var_export($array); ``` 假如我們沒裝`mb`擴展怎么辦? # 解決方案二 今天看到一份代碼,別人是這么寫的: ``` 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`計算的是字節數,而直接使用`$str[x]`就沿用了c語言里面char數組和字符串的習慣,表示按字節來讀取`$str`,也就是說每次讀取的數據的ascii碼值不可能大于255。而php里使用`ord`來獲取ascii碼值。 ## 切割規則如下 | ascii 碼范圍 | 切割偏移量 | | --- | --- | | 0 ~ 127 | 1 字節 | | 192 ~ 223 | 2 字節 | | 224 ~ 239 | 3 字節 | | 240 ~ 247 | 4 字節 | ## 為什么呢? > [http://www.ruanyifeng.com/blo...](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) > [https://segmentfault.com/a/11...](https://segmentfault.com/a/1190000012692022)?口語化敘述 utf-8 的來歷 ### Unicode Unicode 只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲。 ### UTF-8 UTF-8 就是在互聯網上使用最廣的一種 Unicode 的實現方式。UTF-8 最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。 UTF-8 的編碼規則很簡單,只有二條: 1. 對于單字節的符號,字節的第一位設為`0`,后面`7`位為這個符號的 Unicode 碼。因此對于英語字母,UTF-8 編碼和 ASCII 碼是相同的(能容納0~127)。 2. 對于`n`字節的符號(n > 1),第一個字節的前`n`位都設為1,第`n + 1`位設為0,后面字節的前兩位一律設為`10`。剩下的沒有提及的二進制位,全部為這個符號的 Unicode 碼。 下表總結了編碼規則,字母`x`表示可用編碼的位: | Unicode 符號范圍(十六進制) | UTF-8 編碼方式(二進制) | UTF-8 首字節范圍 | | --- | --- | --- | | 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 | 想必看了這個表,大家就能明白了吧。 原文來源: [https://segmentfault.com/a/1190000012710624](https://segmentfault.com/a/1190000012710624)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看