截字在很多網站上都可尋覓其蹤跡,當你在使用截字時,要先能夠明白字元的計算方式,字元的長度會因編碼而有所不同,英數字是沒有任何差別,因為都為1個字元,但倘若遇到中文字時,則有不同的長度,一個中文字若是使用繁體編碼(big5)或是簡體編碼(GBK或GB2312)則為2字元,但若是變為utf-8時,則一個中文字會是3個字元,因此php截字時應特別注意此點,下面此截取字串函數,算是蠻實用的,提供參考:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php
# 截取字串函數
# 小學生 https://scriptmarks.com
# 實用的截字函數
function gylsubstr($str,$length,$start=0,$charset="utf-8",$suffix=false) {
if(function_exists("mb_substr")){
if(mb_strlen($str, $charset) <= $length) return $str;
$slice = mb_substr($str, $start, $length, $charset);
} else{$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);
if(count($match[0]) <= $length) return $str;
$slice = join("",array_slice($match[0], $start, $length));
} if($suffix) return $slice."...";
return $slice;
}
|
函數參數說明:
- $str:來源字串
- $length:要截取的字串長度
- $start:由第幾個字元開始截取
- $charset:使用的字元編碼方式(預設為utf8),編碼可設為 big5、utf-8、gbk、gb2312
- $suffix:字串截取完後,是否在字串後面加上 ... 符號,設成 true 時會在字尾加入...符號,false時則不會加入
調用說明:
echo gylsubstr('來源字串','截取長度','起始字元位置','編碼',false);
如:
$x = "真人版少年PI 他靠單槳93天横跨大西洋柏帝许靠单桨横跨大西洋,費時93天。(翻攝自Chris Bertish- I'MPossible)
柏帝許自去年(2016年)12月由非洲摩洛哥出发到今完成壮举的93天间,不僅獨自面對海上孤獨,更遭遇鯊魚威脅、儀器故
障、險峻風浪等無數艱難的時刻。他將這些經歷一一紀錄在臉書專頁《Chris Bertish- I'MPossible》上,全力貫徹「無事不可能」的信念。";
echo gylsubstr($x,'120','0','big5',false);
引用資料來源:
https://scriptmarks.com/php截取字串函數/
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。