str_starts_with()是php 8.0引入的原生函数,用于严格、大小写敏感地判断字符串是否以指定子串开头,支持空字符串(恒返回true),语义清晰且二进制安全。

str_starts_with() 是 PHP 8.0 引入的原生字符串函数,用来快速、安全、直观地判断一个字符串是否以指定子串开头。它替代了过去需要组合 substr()、strpos() 或 substr_compare() 的繁琐写法,代码更清晰,语义更明确。
基本用法和参数说明
函数签名非常简洁:
str_starts_with(string $haystack, string $needle): bool
- $haystack:被检查的原始字符串(比如用户输入、文件路径、URL)
-
$needle:要匹配的开头子串(比如
"https://"、"admin_"、"v1/") - 返回
true表示严格以该子串开头;否则返回false
注意:该函数区分大小写,且支持空字符串——任何字符串都以空字符串 '' 开头,因此 str_starts_with('abc', '') 恒为 true。
常见使用场景举例
以下都是真实开发中高频出现的需求:
- 验证 URL 协议:
str_starts_with($url, 'https://') - 识别 API 版本前缀:
str_starts_with($path, '/v2/') - 过滤管理员配置键:
str_starts_with($key, 'wp_') - 检查文件扩展名前缀(配合
pathinfo):str_starts_with($basename, 'cache_')
示例代码:
<?php <br> $url = 'https://example.com/api/data';<br> if (str_starts_with($url, 'https://')) {<br> echo '使用安全协议';<br> }<br>?>
大小写敏感与兼容处理
默认严格区分大小写:
str_starts_with('Hello World', 'hello') → falsestr_starts_with('Hello World', 'Hello') → true
如需不区分大小写的判断,PHP 8 本身未提供内置变体,但可轻松封装:
function str_starts_with_ci($haystack, $needle) {<br> return str_starts_with(strtolower($haystack), strtolower($needle));<br>}
或直接用传统方式(兼容旧版本):
0 === stripos($haystack, $needle) —— 注意必须用 === 判断,避免位置 0 被误判为 false。
兼容性与 WordPress 等环境的注意事项
如果你的项目运行在 PHP
- WordPress 5.9+ 已内置
str_starts_with()的 polyfill,可直接使用 - Laravel、Symfony 等主流框架也普遍通过 helpers 或组件做了兼容支持
- 自行 polyfill 很简单(WordPress 官方实现):
if (!function_exists('str_starts_with')) {<br> function str_starts_with($haystack, $needle) {<br> if ($needle === '') return true;<br> return 0 === strpos($haystack, $needle);<br> }<br>}
该 polyfill 完全复刻原生行为:支持空 needle、二进制安全、不依赖 mbstring 扩展。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











