strpos在php 8.2中仍为大小写敏感函数,返回子串首次出现的字节索引(从0开始),未找到返回false;必须用!==判断结果,支持非负整数offset参数,但不适用于utf-8中文,应改用mb_strpos。

基本用法:找第一个匹配位置
它返回子串在主串中首次出现的起始索引(从 0 开始),找不到则返回 false:
$text = "Hello World"; $pos = strpos($text, "o"); // 返回 4("Hello" 的第二个 o) $pos = strpos($text, "Wor"); // 返回 6 $pos = strpos($text, "xyz"); // 返回 false
必须用 === 判断结果,不能用 == 或 if 直接判断
因为合法位置可能是 0(比如在开头找到),而 0 == false 为真,会导致误判:
- ✅ 正确:
if (strpos($text, "H") !== false) { ... } - ❌ 错误:
if (strpos($text, "H")) { ... }—— 开头字符 H 返回 0,条件不成立 - ❌ 错误:
if (strpos($text, "H") == false) { ... }—— 0 == false 为 true,逻辑反转
支持 offset 参数:跳过前面若干字符再查
第三个参数指定从第几个字节开始搜索(不是字符!):
-
strpos("abcabc", "a", 1)→ 返回 3(跳过第一个 a,从索引 1 开始找,第二个 a 在索引 3) - 负数 offset 不被支持(PHP 8.2 中仍只接受非负整数)
- 注意:这是按字节偏移,对 UTF-8 中文可能出错(见下一条)
中文或 UTF-8 字符请用 mb_strpos,别依赖 strpos
strpos 是单字节函数,把字符串当字节数组处理。UTF-8 中一个汉字占 3 字节,strpos("你好", "好") 看似合理,但实际:
-
strlen("你好")是 6,不是 2 -
strpos("你好", "好")可能返回 3 —— 这是字节位置,不是“第几个字符” - 若配合
substr截取,容易切出乱码 - ✅ 正确做法:
mb_strpos("你好", "好", 0, "UTF-8"),返回字符位置 1
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











