文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个比较完善支持gb2312的substr函数

一个比较完善支持gb2312的substr函数

时间:2006-07-25  来源:bufferfly


               
                这段代码不像网络上流传的其它版本,并不依靠逐字节遍历. 基本原理是通过定义 gb2312 编码下一个完整汉字的特征
/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/" 和一个英文字母的特征 "/[\x01-\x77]/" 进行匹配,从而判断需要截取的开始部分和结束部分是否为半个汉字。如果不是,把它之前的所有完整汉字和完整英文字母用preg_replace()去掉,最后跳过余下不完整的部分(加上它们的长度)。
而且,此代码可以支持substr原有的各种参数,包括负数和不完全参数;
不过,当文本中包含扩展字符集GBK中的汉字时,头尾会出现乱码。
function mysubstr($str, $start=0)
{
    $ch = chr(127);
    $p = array( "/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/" , "/[\x01-\x77]/" );
    $r = array( "" , "" );
    if(func_num_args() > 2)
    {
        $len = func_get_arg(2);
    }
    else
    {
        $len = strlen($str);
    }
    if($start  0)
    {
          $s = substr($str,0,$start);
          if($s[strlen($s)-1] > $ch)
        {
            $s = preg_replace($p,$r,$s);
            $start += strlen($s);
        }
    }
    $s = substr($str,$start,$len);
    $len = strlen($s);
    if($s[$len-1] > $ch)
    {
        $s = preg_replace($p,$r,$s);
        $len += strlen($s);
    }
    return substr($str,$start,$len);
}
               
               
               
               

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载