關於TP5的字串擷取及……2種方案!
阿新 • • 發佈:2019-01-22
在公共的common.php中
方法1
//字串擷取 function cut_str($sourcestr,$cutlength) { $returnstr=''; $i=0; $n=0; $str_length=strlen($sourcestr);//字串的位元組數 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); //根據UTF-8編碼規範,將3個連續的字元計為單個字元 $i=$i+3; //實際Byte計為3 $n++; //字串長度計1 } elseif ($ascnum>=192) //如果ASCII位高與192, { $returnstr=$returnstr.substr($sourcestr,$i,2); //根據UTF-8編碼規範,將2個連續的字元計為單個字元 $i=$i+2; //實際Byte計為2 $n++; //字串長度計1 } elseif ($ascnum>=65 && $ascnum<=90) //如果是大寫字母, { $returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; //實際的Byte數仍計1個 $n++; //但考慮整體美觀,大寫字母計成一個高位字元 } else //其他情況下,包括小寫字母和半形標點符號, { $returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; //實際的Byte數計1個 $n=$n+0.5; //小寫字母和半形標點等與半個高位字元寬... } } if ($str_length>$i){ $returnstr = $returnstr . "...";//超過長度時在尾處加上省略號 } return $returnstr; }
方法2:
//字串擷取並且超出顯示省略號
function subtext($text, $length)
{
if(mb_strlen($text, ‘utf8’) > $length)
return mb_substr($text,0,$length,’utf8′).’ …’;
return $text;
}
在模版中呼叫則:
{$tops.title | subtext=18}