选择语言 :

 Core_Text::substr

截取文件

null Core_Text::substr( string $str , int $start [, int $length = null , string $encoding = string(5) "UTF-8" ] )

参数列表

参数 类型 描述 默认值
$str string $str
$start int $start
$length int $length null
$encoding string $encoding string(5) "UTF-8"
File: ./core/classes/text.class.php
public static function substr($str, $start, $length = null, $encoding = 'UTF-8')
{
    if (IS_MBSTRING)
    {
        if (null===$length)
        {
            return mb_substr((string)$str, $start, null, $encoding);
        }
        else
        {
            return mb_substr((string)$str, $start, $length, $encoding);
        }
    }
    else
    {
        if (UTF8::is_ascii($str))return (null===$length) ? substr($str, $start) : substr($str, $start, $length);

        // Normalize params
        $str = (string)$str;
        $strlen = UTF8::strlen($str);
        $start = (int)($start < 0) ? max(0, $strlen + $start) : $start; // Normalize to positive offset
        $length = (null===$length) ? null : (int)$length;

        // Impossible
        if ( $length === 0 or $start >= $strlen or ($length < 0 and $length <= $start - $strlen) ) return '';

        // Whole string
        if ( $start == 0 and ($length === NULL or $length >= $strlen) ) return $str;

        // Build regex
        $regex = '^';

        // Create an offset expression
        if ( $start > 0 )
        {
            // PCRE repeating quantifiers must be less than 65536, so repeat when necessary
            $x = (int)($start / 65535);
            $y = (int)($start % 65535);
            $regex .= ($x == 0) ? '' : '(?:.{65535}){' . $x . '}';
            $regex .= ($y == 0) ? '' : '.{' . $y . '}';
        }

        // Create a length expression
        if ( $length === NULL )
        {
            $regex .= '(.*)'; // No length set, grab it all
        } // Find length from the left (positive length)
        elseif ( $length > 0 )
        {
            // Reduce length so that it can't go beyond the end of the string
            $length = min($strlen - $start, $length);

            $x = (int)($length / 65535);
            $y = (int)($length % 65535);
            $regex .= '(';
            $regex .= ($x == 0) ? '' : '(?:.{65535}){' . $x . '}';
            $regex .= '.{' . $y . '})';
        } // Find length from the right (negative length)
        else
        {
            $x = (int)(- $length / 65535);
            $y = (int)(- $length % 65535);
            $regex .= '(.*)';
            $regex .= ($x == 0) ? '' : '(?:.{65535}){' . $x . '}';
            $regex .= '.{' . $y . '}';
        }

        preg_match('/' . $regex . '/us', $str, $matches);
        return $matches[1];
    }
}