首页 > php开发 > PHP中UTF8中文字符截断程序代码

PHP中UTF8中文字符截断程序代码

最简单的字符截取函数是用php自带的substr(),其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...??.

Multibyte String Functions函数族中,string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 用来字符串截取

int mb_strlen (string $str [,string $encoding ] ) 返回字符串长度

但它只支持数字与字母不支持中文.

实例,UTF8中文字符截断,代码如下:

<?php
/* UTF-8中文字符截断程序 */
$str = "123这是测试字符串";
$str1 = "()()";
echo subUTF8str($str, 0, 3) . "<br>";
echo subUTF8str($str, 0, 4) . "<br>";
echo subUTF8str($str1, 0, 4) . "<br>";
echo subUTF8str($str1, 0, 10) . "<br>";
function subUTF8str($str, $start = 0, $length = 80) {
    $cur_len = 0; //人理解的字符串长度
    $all_len = strlen($str); //机器理解字符串长度
    if ($length > $all_len) {
        return $str;
    }
    for ($i = 0; $i < $all_len;) {
        if ($cur_len == $start) {
            break;
        }
        if (ord($str[$i]) > 127) {
            $i+= 3;
        } else {
            $i+= 1;
        }
        $cur_len++;
    }
    $start_pos = $i;
    $temp_pos = $cur_len;
    for (; $cur_len - $temp_pos < $length;) {
        if ($i >= $all_len) break;
        if (ord($str[$i]) > 127) {
            $i+= 3;
        } else {
            $i+= 1;
        }
        $cur_len++;
    }
    $end_pos = $i;
    return substr($str, $start_pos, $end_pos);
}
?>

 

改进后我们把它分页,这样可支持ut8与gbk等中文字符截取,代码如下:

<?php
function substrs($content, $length) {
    if ($length && strlen($content) > $length) {
        if ($db_charset != 'utf-8') {
            $retstr = '';
            for ($i = 0; $i < $length - 2; $i++) {
                $retstr.= ord($content[$i]) > 127 ? $content[$i] . $content[++$i] : $content[$i];
            }
            return $retstr;
        } else {
            return utf8_trim(substr($content, 0, $length * 3));
        }
    }
    return $content;
}
function utf8_trim($str) {
    $len = strlen($str);
    for ($i = strlen($str) - 1; $i >= 0; $i-= 1) {
        $hex.= ' ' . ord($str[$i]);
        $ch = ord($str[$i]);
        if (($ch & 128) == 0) return substr($str, 0, $i);
        if (($ch & 192) == 192) return substr($str, 0, $i);
    }
    return ($str . $hex);
}
?>


本文地址:http://www.phprm.com/develop/fs4077.html

转载随意,但请附上文章地址:-)

标签:php字符utf8中文字符 截断程序

发表留言