
在 PHP 中,截取字符串是一个常见的操作。以下是几种常用的字符串截取方法及其代码示例。
1. 使用 substr() 函数
substr() 函数用于从字符串中截取指定长度的子串。
语法
substr(string $string, int $start, ?int $length = null): string
$string:原始字符串。$start:起始位置(从 0 开始)。$length:可选,截取的长度。如果未指定,则截取到字符串末尾。
示例代码
<?php$str = "Hello, World!";// 截取前 5 个字符$substring1 = substr($str, 0, 5);echo $substring1; // 输出: Hello// 从第 7 个字符开始截取$substring2 = substr($str, 7);echo $substring2; // 输出: World!// 从倒数第 6 个字符开始截取$substring3 = substr($str, -6);echo $substring3; // 输出: World!?>
2. 使用 mb_substr() 函数
mb_substr() 是 substr() 的多字节版本,适合处理包含中文等多字节字符的字符串。
语法
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string
$encoding:可选,字符编码(如UTF-8)。
示例代码
<?php$str = "你好,世界!";// 截取前 2 个字符$substring1 = mb_substr($str, 0, 2, 'UTF-8');echo $substring1; // 输出: 你好// 从第 3 个字符开始截取$substring2 = mb_substr($str, 3, null, 'UTF-8');echo $substring2; // 输出: 世界!?>
3. 使用 explode() 和 implode() 截取部分字符串
通过 explode() 将字符串拆分为数组,然后使用 implode() 重新组合。
示例代码
<?php$str = "apple,banana,orange";// 按逗号拆分字符串$parts = explode(',', $str);// 截取前两部分$substring = implode(',', array_slice($parts, 0, 2));echo $substring; // 输出: apple,banana?>4. 使用正则表达式截取字符串
通过正则表达式匹配并截取字符串。
示例代码
<?php$str = "The price is $100.";// 截取价格部分preg_match('/\$\d+/', $str, $matches);echo $matches[0]; // 输出: $100?>5. 截取字符串并添加省略号
在截取字符串后,添加省略号以表示截断。
示例代码
<?phpfunction truncateString($str, $length, $ellipsis = '...') {
if (mb_strlen($str, 'UTF-8') > $length) {
return mb_substr($str, 0, $length, 'UTF-8') . $ellipsis;
}
return $str;}$str = "这是一个很长的字符串。";echo truncateString($str, 6); // 输出: 这是一个很...?>6. 综合示例:截取 HTML 内容并保留标签
在截取包含 HTML 标签的字符串时,需要确保标签的完整性。
示例代码
<?phpfunction truncateHtml($html, $length) {
if (mb_strlen(strip_tags($html), 'UTF-8') <= $length) {
return $html;
}
$truncated = '';
$count = 0;
$tags = [];
$tokens = preg_split('/(<[^>]+>)/', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($tokens as $token) {
if (preg_match('/^<[^>]+>$/', $token)) {
$truncated .= $token;
if (preg_match('/^<(\w+)[^>]*>$/i', $token, $matches)) {
$tags[] = $matches[1];
} elseif (preg_match('/^<\/(\w+)[^>]*>$/i', $token, $matches)) {
$tags = array_diff($tags, [$matches[1]]);
}
} else {
$tokenLength = mb_strlen($token, 'UTF-8');
if ($count + $tokenLength > $length) {
$truncated .= mb_substr($token, 0, $length - $count, 'UTF-8');
break;
} else {
$truncated .= $token;
$count += $tokenLength;
}
}
}
while (!empty($tags)) {
$truncated .= '</' . array_pop($tags) . '>';
}
return $truncated;}$html = '<p>这是一个<strong>很长的</strong>字符串。</p>';echo truncateHtml($html, 10); // 输出: <p>这是一个<strong>很长的</strong>...</p>?>7. 总结
在 PHP 中,常用的字符串截取方法包括:
substr():适合单字节字符。mb_substr():适合多字节字符(如中文)。explode()和implode():适合按特定分隔符截取。正则表达式:适合复杂匹配场景。
截取 HTML 内容:需要确保标签完整性。
根据实际需求选择合适的方法,可以有效实现字符串截取功能。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。


