php字符串截取问题

但是在英文和汉字混合的情况下会出现如下问题:

如果有这样一个字符串
$str="这是一个字符串";
为了截取该串的前10个字符,使用
if(strlen($str)>10) $str=substr($str,10)."…";
那么,echo $str的输出应该是"这是一个字…"

假设
$str="这是1个字符串";
这个串中包含了一个半角字符,同样执行:
if(strlen($str)>10) $str=substr($str,10);
由于原字符串$str的第10、11个字符构成了汉字“符”;
执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象。


请问这种问题如何解决?即要使过长字符串实现分割,又不能让它发生乱码?

复制代码 代码如下:


<?php
//村里有很多,这个是gb2312
function substrs($content,$length='30')
{
    if($length && strlen($content)>$length)
    {
        $num=0;
        for($i=0;$i<$length-3;$i++)
        {
            if(ord($content[$i])>127)
            {
                $num++;
            }
        }
        $num%2==1 ? $content=substr($content,0,$length-4):$content=substr($content,0,$length-3);
    }
    return $content;
}
?>

 

复制代码 代码如下:


function cutstr($string, $length, $dot = ' ...') {
        $strcut = '';
        for($i = 0; $i < $length - strlen($dot) - 1; $i++) {
                $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
        }
        return $strcut.$dot;
}


复制代码 代码如下:


function cutTitle($str, $len, $tail = ""){
        $length                = strlen($str);
        $lentail        = strlen($tail);
        $result                = "";
        if($length > $len){
        $len = $len - $lentail;
                for($i = 0;$i < $len;$i ++){
                        if(ord($str[$i]) < 127){
                                $result .= $str[$i];
                        }else{
                                $result .= $str[$i];
                                ++ $i;
                                $result .= $str[$i];
                        }
                }
                $result = strlen($result) > $len ? substr($result, 0, -2) . $tail : $result . $tail;
        }else{
                $result = $str;
        }
        return $result;
}


以下是一些补充:
1. 截取GB2312中文字符串
代码如下:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4c20d5c708a273f635d3e343ba0ad4aa.html