今天看到酷!學園討論區,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