• substr,mb_substr,iconv_substr,array_slice


    通过一个例子来看其关系

    /**
    +----------------------------------------------------------
     * 字符串截取,支持中文和其他编码
    +----------------------------------------------------------
     * @static
     * @access public
    +----------------------------------------------------------
     * @param string $str 需要转换的字符串
     * @param string $start 开始位置
     * @param string $length 截取长度
     * @param string $charset 编码格式
     * @param string $suffix 截断显示字符
    +----------------------------------------------------------
     * @return string
    +----------------------------------------------------------
     */
    function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
    {
        if(function_exists("mb_substr"))
            return mb_substr($str, $start, $length, $charset);
        elseif(function_exists('iconv_substr')) {
            return iconv_substr($str,$start,$length,$charset);
        }
        $re['utf-8']   = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
        $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
        $re['gbk']    = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
        $re['big5']   = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
        preg_match_all($re[$charset], $str, $match);
    //通过preg_match_all将$str字符串进行编码,并返回给$match[0],按序排列组成数组
    //通过array_slice将数组进行切割,然后通过join将切割后的数组的key进行连接
    $slice = join("",array_slice($match[0], $start, $length)); if($suffix) return $slice."…"; return $slice; }

    其中,join是implode的别名函数,将数组拼接成字符串,如果是关联数组,则只会进行key的连接

    array_slice可以指定开始位置,和截取长度,进行切割

    $str1 = "卧室字符串";
    echo mb_substr($str1,0,4,'utf-8')."
    ";
    echo mb_strcut($str1,0,4,'utf-8')."
    ";
    echo substr($str1,0,4)."
    ";

    上例输出:

    卧室字符

    卧�

    可以看出substr是不支持中文的,但是mb_sbustr在安装php的时候需要安装mbstring扩展支持,windows服务器如果没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开

    mb_substr和mb_struct 加上第三个参数后可以支持中文,但是mb_substr是按照字来截取的,mb_struct 是按字节截取的,但是两者都不会截取成半个字。。。

  • 相关阅读:
    借鉴文章记录
    三方框架
    常用第三方库记录
    ios block 类型
    ios runtime部分事例方法说明
    ios url网址相关问题解说
    mysql迁移数据库函数中的坑
    mysql的事务隔离级别
    MySQL数据库的默认隔离级别为什么是可重复读
    实时查看mysql连接数
  • 原文地址:https://www.cnblogs.com/walter371/p/4183380.html
Copyright © 2020-2023  润新知