截取文件
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"
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];
}
}