PHP截取中文字符串方法總結


PHP截取中文字符串有時會出現亂碼

一下代碼使用三種方式解決亂碼問題

<?php 
@header('Content-type: text/html; charset=UTF-8');
$arr = "sa撒的發dfa多少sfd看sdf得12上24飛452機.@$#^辣^&%椒粉b";

/******************************************************************
 * 程序一:PHP截取中文字符串方法
* 截取中文字符串時出現亂碼
****************************************************************/
function msubstr($str, $start, $len) {
    $tmpstr = "";
    $strlen = $start + $len;
    for($i = 0; $i < $strlen; $i++) {
        if(ord(substr($str, $i, 1)) > 0xa0) {
            $tmpstr .= substr($str, $i, 2);
            $i++;
        } else
            $tmpstr .= substr($str, $i, 1);
    }
    return $tmpstr;
}
echo msubstr($arr, 0, 15);
echo "<br><hr><br>";
/******************************************************************
 * PHP截取UTF-8字符串,解決半字符問題。
* 英文、數字(半角)為1字節(8位),中文(全角)為3字節
* @return 取出的字符串, 當$len小於等於0時, 會返回整個字符串
* @param $str 源字符串
* $len 左邊的子串的長度
****************************************************************/
function utf_substr($str,$len)
{
    for($i=0;$i<$len;$i++)
    {
        $temp_str=substr($str,0,1);
        if(ord($temp_str) > 127)
            {
            $i++;
            if($i<$len)
            {
            $new_str[]=substr($str,0,3);
            $str=substr($str,3);
            }
    }
    else
    {
        $new_str[]=substr($str,0,1);
        $str=substr($str,1);
}
}
return join($new_str);
}
echo utf_substr($arr, 39);
echo "<br><hr><br>";

/******************************************************************
 * PHP截取UTF-8字符串,解決半字符問題。
* 截取utf-8字符串,截取后,用 ...代替被截取的部分
* $length 左邊的子串的長度
****************************************************************/
function cutstr($string, $length) {
    preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/", $string, $info);
    for($i=0; $i<count($info[0]); $i++) {
        $wordscut .= $info[0][$i];
        $j = ord($info[0][$i]) > 127 ? $j + 2 : $j + 1;
        if ($j > $length - 3) {
            return $wordscut." ...";
        }
    }
    return join('', $info[0]);
}
echo cutstr($arr,14);
echo "<br><hr><br>";
?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM