php的ord函數??解決中文字元截斷問題

來源:互聯網
上載者:User
函數是這樣定義的:

int ord ( string$string)

返回字串 string 第一個字元的 ASCII 碼值。

該函數是chr()的互補函數。

試一下:

echo ord('我');
這裡只能返回230, 我是以u8儲存的檔案並輸出的, 它得到的只有230, 而230轉換成hex是e6,實際上utf-8中我的編碼是e68891, 它只拿到了第一個位元組
echo chr(0xe6).chr(0x88).chr(0x91);

這個例子可以在utf-8的情況下輸出”我“這個漢字

如果大家想瞭解字元編碼的問題可以點這裡字元編碼

如果大家想查看一個漢字的gbk,utf-8,unicode各種編碼方式推薦大家用Notepad++下的HEX-editor點擊這裡下載:

http://pan.baidu.com/s/1hquyJwo

長這樣子


提高逼格:

身為一個程式猿,除了是苦逼的代名詞外,還是神秘的象徵,偶爾裝XX還是不錯的。既然說到編碼,

那我們就說說屬於你的字吧,在utf-8編碼的世界裡,可不是每個人都能找到屬於自己的那款哦,

‘我’的編碼是三位元組,分別為e6、88、91,如果把你的生日放進去能編出啥字呢,想想是不是還有點小激動,

例如你是1988-9-4出生,那對應的屬於自己的三位元組為e9、88、94,anyway這個方法你也可以自己點,

爆個料,按照此方法,我的字是‘釉’,好字啊,you you 切克鬧。

按照此法為啥不是每個人都有呢,那自己讀下utf-8的二進位儲存規則就知道了,

哈哈,還是點這裡字元編碼

扯了一堆沒用的,其實就是希望大家發現編碼的樂趣


自己動手:

很久以前是沒有mb_substr函數的,因此帶漢字的字串截斷操作處理起來很麻煩,不過現在可以直接用它。

既然我們對字元編碼和ord函數有了很好的瞭解,自己就寫個針對utf-8編碼的字串截斷的函數吧。

代碼很戳,有待最佳化,但理解起來簡單,貼過去可以運行,基本情境也考慮到了,還算欣慰;

 127){    //非ascii碼時                if($cnt >= $start){     //如果計數器走到了$start的位置                    $res .=$str[$i].$str[++$i].$str[++$i]; //utf-8是三位元組編碼,$i指標連走三下,把字元存起來                    $t ++;              //計數器++,表示我存了幾個字串了到$num的數量就退出了                }else{                      $i++;               //如果沒走到$start的位置,那就只走$i指標,字元不用處理                    $i++;                   }                       $cnt ++;            }else{                  if($cnt >= $start){     //acsii碼正常處理就好                    $res .=$str[$i];                    $t++;                   }                       $cnt ++;                                    }                   if($num == $t) break;       //ok,我要截取的數量已經夠了,我不貪婪,我退出了        }               return $res;    }    var_dump(utf8_substr($a, 3, 10));   //結果應該是你想要的?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.