1、函數說明
substr、mb_substr、mb_strcut這三個函數都用來截取字符串,所不一樣的是:substr是最簡單的截取,沒法適應中文;mb_substr是按字來切分字符串,而mb_strcut是按字節來切分字符串,截取中文都不會產生半個字符的現象。
這三個函數的前三個參數徹底一致,即:
第一個參數是操做對象
第二個參數是截取的起始位置
第三個參數是截取的數量
mb_substr和mb_strcut還有第四個參數:第四個參數能夠根據不一樣的字符集進行設置php
<?php html
//對待一個UTF8的中文字符是3個長度 函數
//對待一個gbk的中文字符是2個長度 測試
header("content-Type:text/html;charset=utf-8"); this
//設置內部編碼 編碼
mb_internal_encoding('UTF-8'); spa
//測試 orm
$cn_str="釣魚島是中國的hehe"; htm
$en_str="this is just a test"; 對象
//使用substr
echo substr($cn_str,0,3).'<br/>'; //釣
echo substr($en_str,0,3).'<br/><br/>'; //thi
//使用mbsubstr()
echo "mb_substr-3:".mb_substr($cn_str,0,3).'<br/>'; //釣魚島 按照字來劃分
echo "substr-3:".substr($cn_str,0,3).'<br/>';//釣 按照字節來劃分
echo "mb_strcut-3:".mb_strcut($cn_str,0,3).'<br/><br/>'; //釣 按照字節來劃分
echo "mb_substr-4:".mb_substr($cn_str,0,4).'<br/>'; //釣魚島 按照字來劃分
echo "substr-4:".substr($cn_str,0,4).'<br/>'; //釣 按照字節來劃分(出現亂碼)
echo "mb_strcut-4:".mb_strcut($cn_str,0,4).'<br/><br/>'; //釣 按照字節來劃分(不會出現亂碼)
echo strlen($cn_str).'<br/>'; //26
echo mb_strlen($cn_str).'<br/>'; //12
echo iconv_strlen($cn_str).'<br/>';//26
?>
3、結論 substr、mb_strcut表現都不夠理想,mb_substr能夠正常使用,但前提是要安裝php擴展庫,不然就要本身寫一個適應各類狀況的截取函數了。