使用 strstr() 函数并设置第三个参数为 true,即可截取指定分隔符之后的内容。该函数默认返回分隔符及其后的部分,开启此参数后仅保留分隔符后面的子串。若需处理中文等多字节字符,应改用 mb_strstr() 以避免乱码。

strstr() 的默认行为与参数差异
strstr() 在默认情况下会返回从分隔符第一次出现的位置开始到字符串末尾的所有内容,包括分隔符本身。通过传入第三个布尔参数 true,可以改变这一行为,使其只返回分隔符之后的部分。这种设计允许开发者在不修改原字符串的情况下,灵活控制截取的边界。

<?php $haystack = "user@example.com"; $needle = "@"; // 默认行为:包含分隔符 $result_with_delimiter = strstr($haystack, $needle); echo $result_with_delimiter; // 输出: @example.com // 开启第三个参数:不包含分隔符 $result_without_delimiter = strstr($haystack, $needle, true); echo $result_without_delimiter; // 输出: example.com // 分隔符不存在时返回 false $no_match = strstr($haystack, "#"); var_dump($no_match); // 输出: bool(false)
多字节字符下的安全替代方案
当输入字符串包含中文或其他非 ASCII 字符时,标准的 strstr() 可能会因为按字节切割而导致乱码或错误匹配。此时推荐使用 mb_strstr() 函数,它基于字符而非字节进行定位,确保在多字节编码(如 UTF-8)下也能正确截取。其参数结构与 strstr() 完全一致,只需将分隔符作为第二个参数传入即可。

<?php $haystack = "用户ID:12345"; $needle = ":"; // 使用 mb_strstr 处理多字节字符 $result = mb_strstr($haystack, $needle, true); echo $result; // 输出: 12345 // 对比:如果 haystack 是中文混合 $chinese_haystack = "姓名:张三"; $chinese_result = mb_strstr($chinese_haystack, "姓名", true); echo $chinese_result; // 输出: (空字符串,因为 "姓名" 是前缀) // 实际场景中更常见的用法 $path = "/home/user/docs/file.txt"; $filename = mb_strstr($path, "/", true); // 注意:这里取的是第一个 / 之前的部分,即空字符串 // 若要取最后一个 / 之后,通常用 explode 或 strrpos
基于分隔符位置的具体问题:如何处理多个相同分隔符?
当字符串中存在多个相同的分隔符时,strstr() 始终定位到第一个出现的分隔符。如果目标是获取最后一个分隔符之后的内容,或者需要跳过前面的分隔符,直接使用该函数无法满足需求。此时应先通过 strrpos() 找到最后一次出现的位置,再结合 substr() 进行截取,或者使用 explode() 分割后取最后一项。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











