str_starts_with 是 PHP 8.0+ 原生函数,不兼容 PHP 7.4 及更早版本;替代方案推荐 strncmp;大小写不敏感可用 stripos===0;多字节需谨慎,建议用 mbstring 扩展。

str_starts_with 是 PHP 8.0 正式引入的原生函数,仅在 PHP 8.0 及以上版本 中可用。
明确支持的版本范围
✅ 官方支持:PHP 8.0、8.1、8.2、8.3、8.4(截至当前时间 2026 年)
❌ 不支持:PHP 7.4 及更早所有版本(调用会触发 Fatal error: Uncaught Error: Call to undefined function str_starts_with())
旧版本如何安全替代
若需兼容 PHP 7.4 或更低版本,不能直接调用该函数,而应封装一个兼容性函数:
- 用
strncmp($haystack, $needle, strlen($needle)) === 0—— 性能好、不额外分配内存,推荐用于简单开头判断 - 或手动实现(如知识库中所示):
if ($needle === '') return true;<br> return strlen($haystack) >= strlen($needle) && substr($haystack, 0, strlen($needle)) === $needle; - 避免用
strpos($haystack, $needle) === 0—— 虽然逻辑等价,但strpos本意是定位,语义不如strncmp清晰,且空 needle 时行为不一致
大小写不敏感怎么办
PHP 原生 str_starts_with 区分大小写。如需忽略大小写:
- PHP 8.0+:可封装辅助函数,例如
str_starts_with_ci($haystack, $needle),内部转小写后比对 - 兼容写法:用
stripos($haystack, $needle) === 0(注意必须用=== 0,不是!== false)
多字节字符(如中文、emoji)要注意
str_starts_with 是二进制安全的,但按字节操作 —— 对 UTF-8 多字节字符,只要输入本身编码正确,它仍能正确匹配(因为开头几个字节就是完整字符)。不过:
立即学习“PHP免费学习笔记(深入)”;
- 若字符串含 BOM、编码混杂或非 UTF-8(如 GBK),结果不可靠
- 真正稳妥的多字节开头判断,应使用
mb_substr+===或封装mb_str_starts_with函数,并显式指定'UTF-8'编码 - 运行前建议检测
extension_loaded('mbstring')



















