PHP字符串截取方法
PHP字符串截取方法
引言
截取标题摘要、手机号中间脱敏、按字数截断列表页,是PHP开发里最高频的操作。很多人直接用substr处理中文,结果出现半个汉字的乱码,关键在于substr按字节切,中文UTF-8占3个字节。
substr按字节截取
$str = "hello世界";
echo substr($str, 0, 5); // 输出 hello,中文场景容易切坏
substr只适合纯英文ASCII,遇到中文按字节偏移,可能把一个汉字拆成两半。
mb_substr按字符截取
处理中文要用多字节扩展mbstring:
echo mb_substr("hello世界", 0, 5, 'UTF-8');
第四个参数指定编码UTF-8,按"字"而不是"字节"切,中文完整不烂。
带省略号的摘要截断
function cutText($text, $len = 20) {
if (mb_strlen($text, 'UTF-8') <= $len) return $text;
return mb_substr($text, 0, $len, 'UTF-8') . '...';
}
先mb_strlen算字符长度,超长再截并补省略号,列表页摘要常用。
手机号中间脱敏
$phone = "13812345678";
echo substr($phone, 0, 3) . '****' . substr($phone, -4);
// 138****5678
手机号纯数字,substr完全够用,用-4取后四位。
注意事项
- 中文必须mb_substr并显式传UTF-8,别依赖默认编码;
- 确认服务器装了mbstring扩展,php -m查看;
- 表情、生僻字占多个字节,更要按字符切;
- 截断前先判断长度,避免补省略号反而超长。
总结
纯英文数字用substr,含中文统一mb_substr指定UTF-8,摘要先mb_strlen判断再补省略号,手机号脱敏用substr取头尾。选对函数就不会出现半个汉字乱码。
PHP字符串处理常用函数,substr、explode
前言
PHP字符串处理天天用,截取、拼接、查找、替换,每个项目都离不开。本文整理最常用的字符串函数,收藏随用随查。
一、字符串长度
strlen()
字节长度(中文算3个字节):
echo strlen('hello'); // 5
echo strlen('你好'); // 6(UTF-8每个中文3字节)
mb_strlen()
字符长度(中文算1个字符):
echo mb_strlen('你好', 'utf-8'); // 2
区别: strlen看字节,mb_strlen看字符。
二、截取字符串
substr()
$str = 'hello world';
// 从第0位取5个
echo substr($str, 0, 5); // hello
// 从第6位取到最后
echo substr($str, 6); // world
// 从倒数第5位取
echo substr($str, -5); // world
mb_substr()(中文截取)
$str = '我是中国人';
// 从第0个字符取2个
echo mb_substr($str, 0, 2, 'utf-8'); // 我是
注意: 中文一定要用mb_substr,不然会乱码。
三、查找字符串
strpos()
找位置(从左找,找到返回位置,没找到返回false):
$str = 'hello world';
echo strpos($str, 'world'); // 6
// 没找到
var_dump(strpos($str, 'abc')); // bool(false)
strrpos()
从右找:
echo strrpos('a/b/c', '/'); // 3
strstr()
找并截取:
$str = 'user@example.com';
echo strstr($str, '@'); // @example.com
str_contains()(PHP8)
var_dump(str_contains('hello world', 'world')); // bool(true)
注意: PHP8以上才有。
四、替换字符串
str_replace()
$str = 'hello world';
echo str_replace('world', 'php', $str); // hello php
str_ireplace()
不区分大小写:
echo str_ireplace('WORLD', 'php', $str); // hello php
preg_replace()
正则替换:
$str = '2026-10-09';
// 把横线换成点
echo preg_replace('/-/g', '.', $str); // 2026.10.09
五、拼接和拆分
implode()(数组转字符串)
$arr = ['a', 'b', 'c'];
echo implode(',', $arr); // a,b,c
echo implode('-', $arr); // a-b-c
explode()(字符串转数组)
$str = 'a,b,c';
$arr = explode(',', $str);
// ['a', 'b', 'c']
限制拆分次数
$str = 'a,b,c,d';
// 只拆成2段
$arr = explode(',', $str, 2);
// ['a', 'b,c,d']
六、去除空白
trim()
去首尾空格:
$str = ' hello ';
echo trim($str); // hello
ltrim() / rtrim()
ltrim($str); // 去左边
rtrim($str); // 去右边
七、大小写转换
strtoupper('hello'); // HELLO
strtolower('HELLO'); // hello
ucwords('hello world'); // Hello World
ucfirst('hello'); // Hello
八、重复和填充
str_repeat()
echo str_repeat('ab', 3); // ababab
str_pad()
// 补到10位,右边补*
echo str_pad('123', 10, '*', STR_PAD_RIGHT); // 123*******
// 左边补
echo str_pad('123', 10, '0', STR_PAD_LEFT); // 0000000123
九、常见场景
场景1:手机号中间打星号
$phone = '13812345678';
echo substr($phone, 0, 3) . '****' . substr($phone, -4);
// 138****5678
场景2:截取文件名后缀
$file = 'photo.jpg';
echo strrchr($file, '.'); // .jpg
场景3:邮箱拆分
$email = 'user@example.com';
$name = strstr($email, '@', true); // user
$domain = strstr($email, '@'); // @example.com
场景4:URL参数解析
$url = 'https://example.com/index.php?id=1&name=zhangsan';
// 拿问号后面的
$query = parse_url($url, PHP_URL_QUERY);
// id=1&name=zhangsan
parse_str($query, $params);
// ['id' => '1', 'name' => 'zhangsan']
场景5:HTML标签转义
$str = '<script>alert(1)</script>';
echo htmlspecialchars($str);
// <script>alert(1)</script>
十、常见坑
坑1:中文截取乱码
用substr截中文,结果乱码了。
原因: substr按字节截,中文一个字3个字节,容易截到半个字。
解决: 用mb_substr:
mb_substr($str, 0, 10, 'utf-8');
坑2:strpos===0的问题
$str = 'abc';
if (strpos($str, 'a') == false) {
echo '没找到';
}
问题: strpos找到a在位置0,0==false是true。
解决:
if (strpos($str, 'a') === false) {
echo '没找到';
}
注意: 一定要用===,不是==。
坑3:trim只去空格
trim默认只去空格和换行。
要去指定字符:
trim($str, "/"); // 去首尾的/
坑4:explode空字符串
$str = '';
$arr = explode(',', $str);
// [''] 不是空数组!
解决:
if ($str === '') {
$arr = [];
} else {
$arr = explode(',', $str);
}
总结
最常用的10个:
strlen()字符串长度(字节)mb_strlen()字符长度(中文友好)substr()截取字符串strpos()查找位置str_replace()替换explode()字符串转数组implode()数组转字符串trim()去空格strtoupper()/strtolower()大小写str_pad()填充
记住:
- 中文用mb_*系列函数
- 查找用=== false判断
- 数组字符串互转用explode/implode
遇到问题加QQ23979811 协助处理
PHP 字符串处理函数
PHP 字符串处理函数
字符串处理是 PHP 最常用的操作,这些函数一定要会。
1. 截取字符串
// 截取前n个字符
substr("hello world", 0, 5); // hello
// 中文截取(用mb_substr)
mb_substr("你好世界", 0, 2, "utf-8"); // 你好
2. 替换字符串
// str_replace 替换
str_replace("world", "PHP", "hello world"); // hello PHP
// 只替换第一次出现
str_replace("a", "b", "aaa", $count);
3. 查找字符串
// 查找位置(找不到返回false)
strpos("hello world", "world"); // 6
// 注意:用 === 0 判断开头
if (strpos($str, "hello") === 0) {
echo "以hello开头";
}
4. 大小写转换
// 转小写
strtolower("Hello"); // hello
// 转大写
strtoupper("hello"); // HELLO
// 首字母大写
ucfirst("hello"); // Hello
// 每个单词首字母大写
ucwords("hello world"); // Hello World
5. 去除空白
// 去除两边空格
trim(" hello "); // hello
// 去左边
ltrim(" hello "); // hello
// 去右边
rtrim(" hello "); // hello
6. 字符串拼接
// 用点拼接
$str = "hello" . " " . "world";
// 多变量拼接
$a = "hello";
$b = "world";
$c = "$a $b"; // hello world
7. 分割和合并
// 分割成数组
$arr = explode(",", "a,b,c"); // ["a", "b", "c"]
// 数组合并成字符串
$str = implode(",", $arr); // a,b,c
8. 常用技巧
1)判断是否包含字符串:
if (strpos($str, "hello") !== false) {
echo "包含hello";
}
2)反转字符串:
strrev("hello"); // olleh
3)字符串长度:
strlen("hello"); // 5
mb_strlen("你好", "utf-8"); // 2
总结
PHP 字符串处理要点:
- substr 截取,注意中文用 mb_substr
- str_replace 替换
- strpos 查找,用 !== false 判断
- trim 去空格
- explode/implode 分割合并
- 注意中文编码问题,用 mb 开头的函数
写 PHP,字符串函数天天用。
PHP 字符串处理函数
PHP 字符串处理函数
字符串处理是 PHP 开发最常用的操作,整理一份常用函数清单。
1. 字符串长度
// 英文字符串长度
echo strlen("hello world"); // 11
// 中文字符串长度(mbstring扩展)
echo mb_strlen("你好世界", "UTF-8"); // 4
2. 截取字符串
// 英文截取
echo substr("hello world", 0, 5); // hello
// 中文截取
echo mb_substr("你好世界", 0, 2, "UTF-8"); // 你好
3. 查找替换
// 查找位置
echo strpos("hello world", "world"); // 6
// 替换
echo str_replace("world", "PHP", "hello world"); // hello PHP
// 大小写转换
echo strtoupper("hello"); // HELLO
echo strtolower("HELLO"); // hello
4. 去除空格
// 去除两端空格
echo trim(" hello "); // hello
// 去除左侧空格
echo ltrim(" hello"); // hello
// 去除右侧空格
echo rtrim("hello "); // hello
5. 字符串分割
// 分割成数组
$arr = explode(",", "a,b,c");
print_r($arr); // Array([0]=>a [1]=>b [2]=>c)
// 数组合并成字符串
echo implode(",", $arr); // a,b,c
6. 格式化输出
// 格式化字符串
echo sprintf("你好,%s!今年%d岁", "张三", 25);
// 你好,张三!今年25岁
7. HTML 转义
// 转义特殊字符
echo htmlspecialchars("<script>alert(1)</script>");
// <script>alert(1)</script>
8. 常用场景
截取标题:
function subTitle($str, $len = 20) {
if (mb_strlen($str, "UTF-8") > $len) {
return mb_substr($str, 0, $len, "UTF-8") . "...";
}
return $str;
}
过滤空格和特殊字符:
function filterStr($str) {
$str = trim($str);
$str = str_replace(" ", "", $str);
return $str;
}
总结
字符串处理常用函数:
- 长度:strlen / mb_strlen
- 截取:substr / mb_substr
- 查找替换:strpos / str_replace
- 分割合并:explode / implode
- 去除空格:trim
做 PHP 开发这些函数一定要用熟。
PHP 字符串处理技巧
PHP 字符串处理常用技巧
字符串处理是 PHP 开发最常用的操作,掌握这些函数,写代码效率翻倍。
1. 截取字符串
// 截取前 5 个字符
substr("hello world", 0, 5); // hello
// 截取从第 6 个开始到结尾
substr("hello world", 6); // world
// 中文字符串截取(用 mb_)
mb_substr("你好世界", 0, 2, "UTF-8"); // 你好
注意:中文要用 mb_substr,不能用 substr,否则会乱码。
2. 替换字符串
// str_replace(替换所有)
str_replace("world", "PHP", "hello world"); // hello PHP
// str_ireplace(不区分大小写)
str_ireplace("WORLD", "PHP", "hello world");
// preg_replace(正则替换)
preg_replace("/\d/", "", "abc123def"); // abcdef
3. 查找字符串
// 查找位置(找不到返回 false)
strpos("hello world", "world"); // 6
// 查找最后出现位置
strrpos("hello world hello", "hello"); // 12
// 判断是否包含(PHP 8+)
str_contains("hello world", "world"); // true
// 判断开头
str_starts_with("hello world", "hello"); // true
// 判断结尾
str_ends_with("hello world", "world"); // true
4. 格式化字符串
// 去除首尾空格
trim(" hello "); // hello
// 只去左边/右边
ltrim(" hello"); // hello
rtrim("hello "); // hello
// 转小写/大写
strtolower("Hello"); // hello
strtoupper("hello"); // HELLO
// 首字母大写
ucfirst("hello"); // Hello
// 每个单词首字母大写
ucwords("hello world"); // Hello World
5. 字符串和数组转换
// 字符串转数组
explode(",", "a,b,c"); // ["a","b","c"]
// 数组转字符串
implode(",", ["a","b","c"]); // a,b,c
// 重复字符串
str_repeat("ab", 3); // ababab
// 字符串长度
strlen("hello"); // 5
mb_strlen("你好", "UTF-8"); // 2
6. 常用技巧
// 生成随机字符串
substr(md5(time()), 0, 8);
// 脱敏手机号
substr_replace("13812345678", "****", 3, 4); // 138****5678
// 截取摘要(带省略号)
mb_strlen($text) > 10 ? mb_substr($text, 0, 10) . "..." : $text;
// 清除 HTML 标签
strip_tags("<p>hello</p>"); // hello
总结
PHP 字符串处理核心函数:
- 截取:substr / mb_substr
- 替换:str_replace / preg_replace
- 查找:strpos / str_contains
- 格式化:trim / strtolower / ucwords
- 转换:explode / implode
记住这些,日常开发基本够用了。