1. 程式人生 > >關於TP5的字串擷取及……2種方案!

關於TP5的字串擷取及……2種方案!

在公共的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}