欢迎访问宙启技术站
智能推送

PHP的substr()函数使用指南

发布时间:2023-06-19 13:10:27

substr()函数是PHP中用于截取字符串部分的函数之一。本文将详细介绍substr()函数的使用指南,包括其语法、参数以及示例。

语法:

substr(string $string, int $start, int $length = ?): string

参数:

string:必需。指定要截取的字符串。

start:必需。指定从哪个位置开始截取,可以是负数(表示从字符串末尾开始算起)。

length:可选。指定截取的长度,可以是负数(表示从字符串末尾开始往前算起)。

返回值:

返回一个新的字符串,其值为原始字符串的指定部分。

示例:

$str = 'Hello World';

echo substr($str, 6); //输出 World

echo substr($str, 3, 5); //输出 lo Wo

echo substr($str, -5); //输出 World

echo substr($str, -8, 3); //输出 Wor

使用substr()函数可能会出现一些常见的问题,下面列举一些常见问题以及解决方法。

1、中文字符截取问题

在使用substr()函数截取中文字符时,需要注意中文的编码问题。由于中文字符是UTF-8编码,其字节数不确定,因此需要使用专门的函数来获取中文字符的字节数,再进行截取。例如:

function my_substr($string, $start, $length = null) {

    if (null === $length) {

        $length = strlen($string);

    }

    $len = 0;

    $res = '';

    while ($len < $length) {

        $chr = substr($string, $start, 1);

        $asc = ord($chr);

        if ($asc < 192) {

            $res .= $chr;

            $start++;

            $len++;

        } elseif ($asc < 224) {

            $res .= substr($string, $start, 2);

            $start += 2;

            $len += 2;

        } else {

            $res .= substr($string, $start, 3);

            $start += 3;

            $len += 2;

        }

    }

    return $res;

}

2、截取字符串长度问题

由于substr()函数可以接受负数的参数,因此可能会出现一些意外情况,例如:

$str = 'Hello World';

echo substr($str, 6, -1); //输出 Worl

这里的参数$length为负数,被当做“0”处理,因此输出结果不符合预期。为了避免这种情况,可以添加一些判断语句:

function my_substr($string, $start, $length = null) {

    if (null === $length) {

        $length = strlen($string);

    }

    if ($length <= 0) {

        return '';

    }

    $slen = strlen($string);

    if ($start < 0) {

        $start = $slen + $start;

    }

    if ($length < 0) {

        $length = $slen - $start + $length;

    }

    if ($start >= $slen || $length <= 0 || $start < 0) {

        return '';

    }

    if ($start + $length > $slen) {

        $length = $slen - $start;

    }

    return substr($string, $start, $length);

}

3、截取时不包括起点字符

当$start为字符串的起始位置时,substr()函数不会包括此字符,例如:

$str = 'Hello World';

echo substr($str, 0, 1); //输出 H

为了让截取结果包括起点字符,可以使用一个额外的函数:

function my_substr($string, $start, $length = null) {

    if (null === $length) {

        $length = strlen($string);

    }

    if ($length <= 0) {

        return '';

    }

    $slen = strlen($string);

    if ($start < 0) {

        $start = $slen + $start;

    }

    if ($length < 0) {

        $length = $slen - $start + $length;

    }

    if ($start >= $slen || $length <= 0 || $start < 0) {

        return '';

    }

    if ($start + $length > $slen) {

        $length = $slen - $start;

    }

    return substr($string, $start, $length + ($start === 0 ? 0 : 1));

}

总结:

substr()函数是PHP中一个非常常用的字符串截取函数,但其存在一些问题需要注意。为了避免这些问题,可以自行编写针对特定需求的字符串截取函数。