最簡的就是利用
例子 1
代碼如下 |
複製代碼 |
<?php echo substr("Hello world!",6); ?>輸出: world! 例子 2 <?php echo substr("Hello world!",6,5); ?> |
英文的話沒有問題,但是中文就出問題了,下面我們使用mb_substr函數處理。
/**
*—————————————————————————————————————–
*PHP有一個mbstring擴充庫可以用(有朋友面試PHP的時候還被問到過這個問題哦),但是 *
一般的伺服器都沒開啟php_mbstring.dll,需要在
*php.ini裡把php_mbstring.dll開啟,如果沒有許可權的話就只有聯絡你的ISP了。
*因為mb_string的效率高一些,所以我們先檢查一下mb_string是否可以用:
*—————————————————————————————————————–
*/
代碼如下 |
複製代碼 |
if(function_exists(‘mb_string’)) { mb_substr($string,$start,$length,$encoding); //other codes here } else mysubstr($string,$start,$length);// 調用自己的函數 ?> |
首先定義自己的函數
代碼如下 |
複製代碼 |
<?php /** *———————————- *首先定義自己的函數: *———————————- */ function mysubstr($string, $start, $length) { if(strlen($string)>$length) { $str=”; $len=$start+$length; for($i=$start;$i<$len;$i++) { if(ord(substr($string,$i,1))>0xa0) { $str.=substr($string,$i,2); $i++; } else{ $str.=substr($string,$i,1);} } return $str.’…’; } else{ return $string;} } |
還有一個問題要注意,使用這種方法的時候,你的<head>標籤對裡的charset只有設成中文的編碼才可以,如GBK,GB2312。
下面自己常用的一個中英文字元截取函數
自訂截取中文字串函數,基本上就是仿照mb_substr寫個函數,直接調用罷了,以下為我找到的代碼,其實很簡單
代碼如下 |
複製代碼 |
<?php function substr_cn($string_input,$start,$length) { /* 功能: * 此演算法用於截取中文字串 * 函數以單個完整字元為單位進行截取,即一個英文字元和一個中文字元均表示一個單位長度 * 參數: * 參數$string為要截取的字串, * 參數$start為欲截取的起始位置, * 參數$length為要截取的字元個數(一個漢字或英文字元都算一個) * 傳回值: * 返回截取結果字串 * */ $str_input=$string_input; $len=$length; $return_str=""; //定義Null 字元串 for ($i=0;$i<2*$len+2;$i++) $return_str=$return_str." "; $start_index=0; //計算起始位元組位移量 for ($i=0;$i<$start;$i++) { if (ord($str_input{$start_index}>=161)) //是漢語 { $start_index+=2; } else //是英文 { $start_index+=1; } } $chr_index=$start_index; //截取 for ($i=0;$i<$len;$i++) { $asc=ord($str_input{$chr_index}); if ($asc>=161) { $return_str{$i}=chr($asc); $return_str{$i+1}=chr(ord($str_input{$chr_index+1})); $len+=1; //結束條件加1 $i++; //位置位移量加1 $chr_index+=2; continue; } else { $return_str{$i}=chr($asc); $chr_index+=1; } } return trim($return_str); }//end of substr_cn ?> |