可以保證單詞完整性的PHP英文字符串截取代碼分享
直接上代碼:
/** * 完整詞的截取 * * @param $str * @param $start * @param $length * * @return string */ public static function usubstr($str, $start, $length = null) { // 先正常截取一遍. $res = substr($str, $start, $length); $strlen = strlen($str); /* 接著判斷頭尾各6字節(jié)是否完整(不殘缺) */ // 如果參數(shù)start是正數(shù) if ($start >= 0) { // 往前再截取大約6字節(jié) $next_start = $start + $length; // 初始位置 $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start; $next_segm = substr($str, $next_start, $next_len); // 如果第1字節(jié)就不是 完整字符的首字節(jié), 再往后截取大約6字節(jié) $prev_start = $start - 6 > 0 ? $start - 6 : 0; $prev_segm = substr($str, $prev_start, $start - $prev_start); } // start是負(fù)數(shù) else { // 往前再截取大約6字節(jié) $next_start = $strlen + $start + $length; // 初始位置 $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start; $next_segm = substr($str, $next_start, $next_len); // 如果第1字節(jié)就不是 完整字符的首字節(jié), 再往后截取大約6字節(jié). $start = $strlen + $start; $prev_start = $start - 6 > 0 ? $start - 6 : 0; $prev_segm = substr($str, $prev_start, $start - $prev_start); } // 判斷前6字節(jié)是否符合utf8規(guī)則 if (preg_match('@^([x80-xBF]{0,5})[xC0-xFD]?@', $next_segm, $bytes)) { if (!empty($bytes[1])) { $bytes = $bytes[1]; $res .= $bytes; } } // 判斷后6字節(jié)是否符合utf8規(guī)則 $ord0 = ord($res[0]); if (128 <= $ord0 && 191 >= $ord0) { // 往后截取 , 并加在res的前面. if (preg_match('@[xC0-xFD][x80-xBF]{0,5}$@', $prev_segm, $bytes)) { if (!empty($bytes[0])) { $bytes = $bytes[0]; $res = $bytes . $res; } } } if (strlen($res) < $strlen) { $res = $res . '...'; } return $res; }
相關(guān)文章
php中關(guān)于socket的系列函數(shù)總結(jié)
這篇文章主要介紹了php中關(guān)于socket的系列函數(shù)總結(jié),本文列舉了所有關(guān)于PHP語(yǔ)言中使用socket相關(guān)服務(wù)的一些函數(shù),需要的朋友可以參考下2015-05-05laravel按天、按小時(shí),查詢數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇laravel按天、按小時(shí),查詢數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10LaravelS通過(guò)Swoole加速Laravel/Lumen詳解
這篇文章主要給大家介紹了關(guān)于LaravelS通過(guò)Swoole加速Laravel/Lumen的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03ThinkPHP2.0讀取MSSQL提示Incorrect syntax near the keyword ''AS''
這篇文章主要介紹了ThinkPHP2.0讀取MSSQL提示Incorrect syntax near the keyword 'AS'的解決方法,需要的朋友可以參考下2014-06-06淺談laravel數(shù)據(jù)庫(kù)查詢返回的數(shù)據(jù)形式
今天小編就為大家分享一篇淺談laravel數(shù)據(jù)庫(kù)查詢返回的數(shù)據(jù)形式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10微信營(yíng)銷平臺(tái)系統(tǒng)–刮刮樂(lè)的開發(fā)
最近一直在做微信相關(guān)的開發(fā)工作,刮刮樂(lè)是一個(gè)最常見(jiàn)的微信應(yīng)用了,網(wǎng)上也有很多的教程,本來(lái)是不想寫這篇博文的,但又怕網(wǎng)友被坑,我還是寫一下。2014-06-06Laravel創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu)的例子
今天小編就為大家分享一篇Laravel創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10php文件服務(wù)實(shí)現(xiàn)虛擬掛載其他目錄示例
這篇文章主要介紹了php文件服務(wù)實(shí)現(xiàn)虛擬掛載其他目錄示例,需要的朋友可以參考下2014-04-04PHP getallheaders無(wú)法獲取自定義頭(headers)的問(wèn)題
這篇文章主要介紹了PHP getallheaders無(wú)法獲取自定義頭(headers)的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2016-03-03