您的位置:

从substr函数的用法到实际应用,一位PHP工程师的经验分享

一、substr函数的基础用法

substr函数是PHP中用来截取字符串的函数,其基本语法如下:

string substr ( string $string , int $start [, int $length ] )

参数说明:

  • string:要截取的字符串
  • start:起始位置,如果为负数则表示从字符串末尾数起的位置
  • length:截取的长度,如果未指定则表示截取到字符串末尾

示例代码:

$str = "Hello, world!";
echo substr($str, 0, 5); // 输出:Hello
echo substr($str, -6); // 输出:world!

解释:

  • 第一行代码是将字符串“Hello, world!”从第0个字符开始截取5个字符,结果为“Hello”
  • 第二行代码是将字符串“Hello, world!”从倒数第6个字符开始截取到末尾,结果为“world!”

二、substr函数的高级用法

除了基本的字符串截取外,substr函数还可以和其他函数结合使用,实现更为复杂的功能。

1. 截取中文字符串

由于中文字符占用的字节数不同,所以如果要截取中文字符串就需要进行特殊处理。下面是截取中文字符串的示例代码:

function subtext($text, $length)
{
    if(mb_strlen($text, 'utf8') > $length)
    {
        $text = mb_substr($text, 0, $length, 'utf8') . '...';
    }
    return $text;
}
$text = "这是一段中文字符串,用于测试截取函数的功能。";
echo subtext($text, 10); // 输出:这是一段中文字...

解释:

  • 该函数首先使用mb_strlen函数获取字符串长度,以确保正确截取中文字符串
  • 然后使用mb_substr函数截取字符串,并在末尾添加省略号
  • 最后返回截取后的字符串

2. 截取HTML代码

如果要截取包含HTML标签的字符串,需要注意不能使得标签不完整。下面是截取HTML代码的示例代码:

function htmlCut($html, $length)
{
    $flag = 0;
    $output = '';
    $patten = "/<[^>]+>([^<]*)/";
    preg_match_all($patten, $html, $matches, PREG_OFFSET_CAPTURE);

    foreach ($matches[0] as $val)
    {
        if($flag >= $length)
        {
            break;
        }

        $length -= $flag;
        $str = mb_substr($val[0], 0, $length, 'utf8');

        if(mb_substr_count($val[0], '<') > mb_substr_count($val[0], '>'))
        {
            $output .= $str;
            break;
        }

        $flag += strlen($str);
        $output .= $val[0];
    }

    return $output;
}
$html = '
  

HTML截取示例

这是一段包含HTML标签的文字,用于测试截取函数的功能。

'; echo htmlCut($html, 10); // 输出:

HTML截取示例

这是一...(保证HTML标签完整)

解释:

  • 该函数首先使用正则表达式匹配HTML标签和文字
  • 然后逐个截取标签和文字,直到达到指定的长度,同时保证截取到的标签是完整的
  • 最后返回截取后的HTML代码

三、实际应用场景

substr函数在实际的开发中可以用于很多场景,例如:

1. 截取标题

在展示博客、新闻等文章列表时,通常只显示文章标题的一部分,这时就可以使用substr函数来截取标题字符串。示例代码如下:

$title = "PHP字符串截取-从substr函数到实际应用";
echo '

' . substr($title, 0, 15) . '...

'; // 输出:

PHP字符串截取-...

2. 截取文件名和后缀

在上传文件时,需要对文件名进行处理,通常是截取文件名和后缀。示例代码如下:

$file = "picture.jpg";
$filename = substr($file, 0, strrpos($file, '.'));
$ext = substr($file, strrpos($file, '.') + 1);
echo "文件名:$filename,后缀:$ext"; // 输出:文件名:picture,后缀:jpg

3. 截取字符串并加链接

在展示长文本时,可以截取一部分文字,同时加上“查看更多”链接。示例代码如下:

$content = "这是一段很长的文字,用于测试截取函数的功能。";
echo substr($content, 0, 20) . '...查看更多'; // 输出:这是一段很长的文字,用于测试截取...查看更多

通过上面的几个实例,你可以看到substr函数在实际的开发中有着广泛的应用场景。