PHP針對(duì)中英文混合字符串長(zhǎng)度判斷及截取方法示例
本文實(shí)例講述了PHP針對(duì)中英文混合字符串長(zhǎng)度判斷及截取方法。分享給大家供大家參考,具體如下:
/**
*
* 中英混合字符串長(zhǎng)度判斷
* @param unknown_type $str
* @param unknown_type $charset
*/
function strLength($str, $charset = 'utf-8') {
if ($charset == 'utf-8')
$str = iconv ( 'utf-8', 'gb2312', $str );
$num = strlen ( $str );
$cnNum = 0;
for($i = 0; $i < $num; $i ++) {
if (ord ( substr ( $str, $i + 1, 1 ) ) > 127) {
$cnNum ++;
$i ++;
}
}
$enNum = $num - ($cnNum * 2);
$number = ($enNum / 2) + $cnNum;
return ceil ( $number );
}
/**
*
* 中英混合的字符串截取
* @param unknown_type $sourcestr
* @param unknown_type $cutlength
*/
function cut_str($sourcestr, $cutlength) {
$returnstr = '';
$i = 0;
$n = 0;
$str_length = strlen ( $sourcestr ); //字符串的字節(jié)數(shù)
while ( ($n < $cutlength) and ($i <= $str_length) ) {
$temp_str = substr ( $sourcestr, $i, 1 );
$ascnum = Ord ( $temp_str ); //得到字符串中第$i位字符的ascii碼
if ($ascnum >= 224) //如果ASCII位高與224,
{
$returnstr = $returnstr . substr ( $sourcestr, $i, 3 ); //根據(jù)UTF-8編碼規(guī)范,將3個(gè)連續(xù)的字符計(jì)為單個(gè)字符
$i = $i + 3; //實(shí)際Byte計(jì)為3
$n ++; //字串長(zhǎng)度計(jì)1
} elseif ($ascnum >= 192) //如果ASCII位高與192,
{
$returnstr = $returnstr . substr ( $sourcestr, $i, 2 ); //根據(jù)UTF-8編碼規(guī)范,將2個(gè)連續(xù)的字符計(jì)為單個(gè)字符
$i = $i + 2; //實(shí)際Byte計(jì)為2
$n ++; //字串長(zhǎng)度計(jì)1
} elseif ($ascnum >= 65 && $ascnum <= 90) //如果是大寫(xiě)字母,
{
$returnstr = $returnstr . substr ( $sourcestr, $i, 1 );
$i = $i + 1; //實(shí)際的Byte數(shù)仍計(jì)1個(gè)
$n ++; //但考慮整體美觀,大寫(xiě)字母計(jì)成一個(gè)高位字符
} else //其他情況下,包括小寫(xiě)字母和半角標(biāo)點(diǎn)符號(hào),
{
$returnstr = $returnstr . substr ( $sourcestr, $i, 1 );
$i = $i + 1; //實(shí)際的Byte數(shù)計(jì)1個(gè)
$n = $n + 0.5; //小寫(xiě)字母和半角標(biāo)點(diǎn)等與半個(gè)高位字符寬...
}
}
if ($str_length > $cutlength) {
$returnstr = $returnstr . "..."; //超過(guò)長(zhǎng)度時(shí)在尾處加上省略號(hào)
}
return $returnstr;
}
PS:這里再為大家推薦幾款在線(xiàn)字符統(tǒng)計(jì)工具供大家參考:
在線(xiàn)字?jǐn)?shù)統(tǒng)計(jì)工具:
http://tools.jb51.net/code/zishutongji
在線(xiàn)字符統(tǒng)計(jì)與編輯工具:
http://tools.jb51.net/code/char_tongji
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
延長(zhǎng)phpmyadmin登錄時(shí)間的方法
新安裝的phpmyadmin默認(rèn)是cookie模式,如果閑置十幾分鐘不操作的話(huà),就會(huì)要求重新登錄。2011-02-02
詳解PHP中數(shù)組函數(shù)的知識(shí)點(diǎn)
PHP 的數(shù)組是一種很強(qiáng)大的數(shù)據(jù)類(lèi)型,與此同時(shí) PHP 內(nèi)置了一系列與數(shù)組相關(guān)的函數(shù)可以很輕易的實(shí)現(xiàn)日常開(kāi)發(fā)的功能。所以本文便總結(jié)了一些在常見(jiàn)場(chǎng)景中利用 PHP 內(nèi)置函數(shù)的實(shí)現(xiàn)方法,希望對(duì)你有所幫助2022-11-11
PHP實(shí)現(xiàn)排序堆排序(Heap Sort)算法
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)排序堆排序(Heap Sort)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
php字符串操作常見(jiàn)問(wèn)題小結(jié)
這篇文章主要介紹了php字符串操作常見(jiàn)問(wèn)題,結(jié)合實(shí)例形式分析了php針對(duì)json的操作及字符串轉(zhuǎn)換問(wèn)題,需要的朋友可以參考下2016-10-10

