一、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 = '
<div>
<h1>HTML截取示例</h1>
<p>这是一段包含HTML标签的文字,用于测试截取函数的功能。</p>
</div>';
echo htmlCut($html, 10); // 输出:
<div>
<h1>HTML截取示例</h1>
<p>这是一...(保证HTML标签完整)
</p>
</div>
解释:
- 该函数首先使用正则表达式匹配HTML标签和文字
- 然后逐个截取标签和文字,直到达到指定的长度,同时保证截取到的标签是完整的
- 最后返回截取后的HTML代码
三、实际应用场景
substr
函数在实际的开发中可以用于很多场景,例如:
1. 截取标题
在展示博客、新闻等文章列表时,通常只显示文章标题的一部分,这时就可以使用substr
函数来截取标题字符串。示例代码如下:
$title = "PHP字符串截取-从substr函数到实际应用";
echo '<h2 id="title-1">' . substr($title, 0, 15) . '...</h2>'; // 输出:<h2 id="title-2">PHP字符串截取-...</h2>
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) . '...<a href="#">查看更多</a>'; // 输出:这是一段很长的文字,用于测试截取...<a href="#">查看更多</a>
通过上面的几个实例,你可以看到substr
函数在实际的开发中有着广泛的应用场景。