PHP切り取り中英文文字列

4602 ワード

今日はサイトを書くときに文字列の中国語と英語の切り取りを使いましたが、ここでまとめました.
1.ウェブサイトの中国語コードフォーマットによって、異なるカスタム関数を採用する.
1)PHPはgb 2312中の英語文字列を切り取る
<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バイトで構成され、具体的な数は1バイト目で判断することができる.最初のバイトは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/system 32の下にphpがあることを確認します.mbstring.dllというファイルは、PHPインストールディレクトリextensionsからWindows/system 32にコピーされていません.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です.2番目の文字の位置は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>