国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

細說PHP中strlen和mb_strlen的區別

2020-03-22 17:56:32
字體:
來源:轉載
供稿:網友
  • 在PHP中,strlen與mb_strlen是求字符串長度的函數,但是對于一些初學者來說,如果不看手冊,也許不太清楚其中的區別。
    下面通過例子,講解這兩者之間的區別。

    $str='中文a字1符';  echo strlen($str);//字節個數 ,14echo mb_strlen($str,'UTF-8');//選定內碼為UTF-8,中文作為一個字節,6echo mb_strlen($str,'gbk'); //8echo mb_strlen($str,'gb2312'); //10

    結果分析:在strlen計算時,對待一個UTF8的中文字符是3個長度,所以“中文a字1符”長度是3*4+2=14,在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字符當作長度1來計算,所以“中文a字1符”長度是6 .

    至于gbk,gb2312我也不太清楚,請大家指教。

    利用這兩個函數則可以聯合計算出一個中英文混排的串的占位是多少(一個中文字符的占位是2,英文字符是1)

    echo (strlen($str) + mb_strlen($str,'UTF8')) / 2; 

    例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,則可以計算出“中文a字1符”的占位是10.

    echo mb_internal_encoding();

    內部編碼可以通過 mb_internal_encoding()函數得到。

      PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得 到的只是字符串所占的字節數。對于GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對于UTF-8編碼的中文,就是3倍的差異了(在 UTF-8編碼下,一個漢字占3個字節)。

    采用mb_strlen函數可以較好地解決這個問題。mb_strlen的用法和 strlen類似,只不過它有第二個可選參數用于指定字符編碼。例如得到UTF-8的字符串$str長度,可以用 mb_strlen($str,'UTF-8')。如果省略第二個參數,則會使用PHP的內部編碼。

      需要注意的是,mb_strlen并不是PHP核心函數,使用前需要確保在php.ini中加載了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在并且沒有被注釋掉,否則會出現未定義函 數的問題。

    關于 mb_internal_encoding();中的說的內部編碼,是php在處理寬字符時. 默認處理文本文件會使用那個編碼設置。

    寬字符是指需要多字節表示的字符。mb_internal_encoding 是設置獲取獲取mb擴展的默認編碼設置。mb擴展是php的一個處理寬字符(例如:中文,日文,韓文等)函數庫。

    strlen(),substr() 操作字符串的時候都是按照內部編碼(mb_internal_encoding())來處理的。

    PHP編程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁明县| 桃源县| 竹北市| 澄城县| 穆棱市| 大丰市| 封丘县| 元阳县| 南和县| 昌图县| 确山县| 治多县| 阳原县| 淅川县| 牡丹江市| 石阡县| 娱乐| 陆川县| 龙门县| 凤台县| 昭苏县| 旌德县| 罗江县| 壶关县| 申扎县| 城市| 阜城县| 辽阳市| 西和县| 潞城市| 西青区| 巧家县| 洛扎县| 西华县| 彰武县| 延长县| 稷山县| 卓资县| 南京市| 南京市| 特克斯县|