PHP支援多種檔案編碼的中文字元截取函數

來源:互聯網
上載者:User
通過使用多種方法來實現中文字串的完美截取,在未安裝mbstring 和 iconv擴充情況下支援UTF-8、GBK、GB2312、BIG5編碼,安裝上述擴充後支援的編碼更多,詳細情況參考函數說明。
共有三種方法
1、mb_substr() 需要 mbstring 擴充
2、iconv_substr() 需要 iconv擴充
3、正則匹配,預設支援
三種方法優先順序從上至下,上一種方法不可用則自動使用下一種方法。

本代碼從 Midnight 發布的 "字串截取, 支援常用編碼" 代碼最佳化而來

1.修複原代碼中對 mb_substr 和 iconv_substr 沒有進行return ,所以相當於無效調用
2.最佳化截取字串尾碼,可以自訂尾碼。預設為空白。

<?php/** * 字串截取,支援中文和其他編碼 * * @param string $str 需要轉換的字串 * @param string $start 開始位置 * @param string $length 截取長度 * @param string $charset 編碼格式 * @param string $suffix 截斷字串尾碼 * @return string */function substr_ext($str, $start=0, $length, $charset="utf-8", $suffix=""){    if(function_exists("mb_substr")){         return mb_substr($str, $start, $length, $charset).$suffix;    }    elseif(function_exists('iconv_substr')){         return iconv_substr($str,$start,$length,$charset).$suffix;    }    $re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";    preg_match_all($re[$charset], $str, $match);    $slice = join("",array_slice($match[0], $start, $length));    return $slice.$suffix;}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.