今天看到酷!學園討論區,php版有人問說要如何切割中文字,結果我自己以前弄的一個function就貼了上去,如下
function cut_word($text, $num){
if(strlen($text) > $num) {
for($i=0;$i<$num;$i++) {
$ch=substr($text,$i,1);
if(ord($ch)>127) $i++;
}
$text= substr($text,0,$i).".";
}
return $text;
}
後來有人回應,這個function只能用在 big5底下,結果我測試了一下,的確只能用在big5底下,所以我又去官方網看了一下
tw.php.net 發現底下這個function可以用在 big5 或者是 utf-8底下都ok
// String intercept By Bleakwind
// utf-8:$byte=3 | gb2312:$byte=2 | big5:$byte=2
function bite_str($string, $start, $len, $byte=3)
{
$str = "";
$count = 0;
$str_len = strlen($string);
for ($i=0; $i<$str_len; $i++) {
if (($count+1-$start)>$len) {
$str .= "...";
break;
} elseif ((ord(substr($string,$i,1)) <= 128) && ($count < $start)) {
$count++;
} elseif ((ord(substr($string,$i,1)) > 128) && ($count < $start)) {
$count = $count+2;
$i = $i+$byte-1;
} elseif ((ord(substr($string,$i,1)) <= 128) && ($count >= $start)) {
$str .= substr($string,$i,1);
$count++;
} elseif ((ord(substr($string,$i,1)) > 128) && ($count >= $start)) {
$str .= substr($string,$i,$byte);
$count = $count+2;
$i = $i+$byte-1;
}
}
return $str;
}
reference:點我 不過有人說 利用 mb_substr 會更好我自己測試如下
$string = '這是測試用'; $string = mb_substr($string, 0, 3, 'UTF-8'); echo $string; // 會輸出 '這是測'如果要使用 big5 就把 UTF-8 改成 big-5,或找是可以在最前面加上
mb_internal_encoding("UTF-8");
$string = "0123456789";
$mystring = mb_substr($string,5,1);
echo $mystring;
See also
- 來聊聊 PHP & JavaScript & CSS 的 Coding Style
- 為什麼我選擇使用 Laravel Framework?
- Laravel 搭配 Google, Facebook, Twitter 第三方 OAuth 認證
- 將 wordpress 強制使用 SSL 連線
- PHP 7 vs HHVM Benchmark 比較
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- Laravel Homestead 支援 MySQL 5.7 和 Node 5.0
- PHP-FIG 新網站
- Laravel Homestead 支援 PHP 7
- Laravel 5.1 is released