PHP截取中英文字符串

今天在寫網站的時候用到了字符串的中英文截取,特此總結了一下:


1.根據網站的中文編碼格式,採取不同的自定義函數。

1)PHP截取gb2312中英文字符串

<span style="font-family:Courier New;font-size:14px;"><span style="font-family:SimHei;font-size:14px;"><?php 
//PHP截取gb2312中文字符串
/**
 * PHP截取gb2312中文字符串
 * @param $str 被截取的字符串
 * @param $start 起始長度
 * @param $len 截取長度
 * @param $suffix 後綴字符串
 */

function gbk_str($str, $start, $len,$suffix=""){
    $tmpstr = "";
    $n=0; 
    $length = $start+$len;
    echo $length."<br/>";
    for($i=0; $i<strlen($str); $i++,$n++){
        $value=ord(substr($str,$i,1));
        echo $value."--<br/>";
        if($value>0xa0){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,2);    
            }
            $i++;
        }else{
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,1);
            }
        }
    }
    return $tmpstr.$suffix;
}
//測試案例
$str = "測試字符串'abcdefg";
echo gbk_str($str,2,9,"...");</span></span>

顯示效果:

字符串'abcde...

2)PHP截取utf-8中英文字符串

原理:

UTF-8編碼的字符可能由1~3個字節組成,
具體數目可以由第一個字節判斷出來。
第一個字節大於239小於248的,它與它之後的3個字節組成一個UTF-8字符
第一個字節大於223小於240的,它與它之後的2個字節一起組成一個UTF-8字符
第一個字節大於191小於224的,它與它之後的1個字節組成一個UTF-8字符
否則第一個字節本身就是一個英文字符(包括數字和一小部分標點符號)。
注意:小寫字母和半角標點等與半個高位字符寬

<span style="font-family:Courier New;font-size:14px;"><span style="font-family:SimHei;font-size:14px;">/**
 * PHP截取utf-8中文字符串
 * @param $str 被截取的字符串
 * @param $start 起始長度
 * @param $len 截取長度
 * @param $suffix 後綴字符串
 */
function utf8_str($str,$start,$len,$suffix=""){
    $tmpstr = "";
    $n = 0;
    $i = 0;
    $length = $start+$len;
    while($i<strlen($str)){
        $value = ord($str[$i]);
        if($value >= 65 && $value <= 90){//大寫字母        
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,1);
            }
            $n++;
            $i++;
        }
        elseif($value >= 192 && $value <= 223){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,2);
            }
            $n++;
            $i+=2;
        }
        elseif($value >= 224 && $value <= 239){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,3);
            }    
            $n++;
            $i+=3;
        }
        elseif($value >= 240 && $value <= 247){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,4);
            }
            $n++;
            $i+=4;
        }
        else{//其他情況下,包括小寫字母和半角標點符號
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,1);
            }
            $n += 0.5;
            $i++;
        }
    }
    if($n<$len){
     return $tmpstr;
   }else{    
     return $tmpstr.$suffix;
   }
}
//測試案例
$str = "測試字符串'abcdefg";
echo utf8_str($str,2,9,"...");</span></span>

顯示效果:

字符串'abcdefg...

2.使用內置的PHP字符串截取函數,mb_substr()

1.要確保你的Windows/system32下有php_mbstring.dll這個文件,沒有就從PHP安裝目錄extensions裏拷入Windows/system32裏面。
2.windows下的PHP目錄中找到配置文件php.ini並打開,搜索mbstring.dll,找到;extension=php_mbstring.dll把前面的;號去掉

mb_substr — 獲取字符串的部分
說明:
string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
根據字符數執行一個多字節安全的 substr() 操作。 位置是從 str 的開始位置進行計數。 第一個字符的位置是 0。第二個字符的位置是 1,以此類推。

參數:
str
    從該 string 中提取子字符串。
start
    str 中要使用的第一個字符的位置。
length
    str 中要使用的最大字符數。 If omitted or NULL is passed, extract all characters to the end of the string.
encoding
    encoding 參數爲字符編碼。如果省略,則使用內部字符編碼。
返回值
mb_substr() 函數根據 start 和 length 參數返回 str 中指定的部分。


函數如下:

<span style="font-family:Courier New;font-size:14px;">function mystr($str,$start,$len,$charset,$suffix){
    $tmpstr="";
    $tmpstr .= mb_substr($str,$start,$len,$charset);
    return $tmpstr."...";
}
$str1 = "這是一個悲傷的故事abcdefg";
echo mystr($str1,2,9,"utf-8","...");</span>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章