当前位置: 首页> 最新文章列表> 如何使用 mb_stristr 检测字符串中是否存在子串?详细教程

如何使用 mb_stristr 检测字符串中是否存在子串?详细教程

M66 2025-06-26

如何使用 mb_stristr 检测字符串中是否存在子串?详细教程

在 PHP 中,字符串操作是一个常见的任务。无论你是在处理用户输入、处理文件内容,还是分析网络请求,都会频繁地需要查找或操作字符串。而在多字节编码(如 UTF-8)环境下,标准的字符串函数可能无法正确处理某些特殊字符,这时,mb_stristr 就成为了一个非常实用的工具。

什么是 mb_stristr

mb_stristr 是 PHP 中多字节字符串扩展(mbstring)提供的一个函数。它的功能类似于 PHP 中的 stristr,用来在一个字符串中查找是否存在另一个子串,但它专门用于处理多字节字符集,比如 UTF-8 或其他非 ASCII 编码。

  • 功能:查找目标字符串是否包含指定的子串,忽略大小写。

  • 返回值:如果子串存在,则返回从第一次出现的子串开始直到字符串结束的部分;如果子串不存在,则返回 false

如何使用 mb_stristr

mb_stristr 函数的基本语法如下:

<span><span><span class="hljs-title function_ invoke__">mb_stristr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$before_needle</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $haystack:目标字符串,也就是你想要查找的那个大字符串。

  • $needle:要查找的子串。

  • $before_needle:可选参数,如果设置为 true,则返回子串首次出现前的部分。默认为 false,表示返回从子串第一次出现的位置到字符串结束的部分。

  • $encoding:可选参数,指定字符编码。默认情况下,mb_stristr 使用内部字符编码设置。

示例:简单用法

假设你有一个字符串,需要查找它是否包含特定的子串。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"欢迎来到PHP编程世界!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"PHP"</span></span><span>;

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_stristr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"找到了子串!结果是:"</span></span><span> . </span><span><span class="hljs-variable">$result</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"没有找到子串。"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在上面的代码中,我们使用 mb_stristr 查找字符串 $haystack 中是否包含子串 $needle(即 "PHP")。如果找到了,返回的是从 "PHP" 开始直到字符串结束的部分。如果没有找到,则返回 false

输出将是:

<span><span>找到了子串!结果是:PHP编程世界!
</span></span>

忽略大小写

stristr 类似,mb_stristr 也是大小写不敏感的,这意味着它会忽略字符的大小写。因此,如果 $needle 是小写字母 "php" 或大写字母 "PHP",它仍然能够找到对应的子串。

例如,以下代码也会找到子串:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"欢迎来到php编程世界!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"PHP"</span></span><span>;

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_stristr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"找到了子串!结果是:"</span></span><span> . </span><span><span class="hljs-variable">$result</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"没有找到子串。"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

使用 mb_stristr 查找多字节字符

在处理 UTF-8 字符串时,标准的 stristr 可能无法正确处理多字节字符,而 mb_stristr 就可以避免这个问题。例如,处理中文字符时,mb_stristr 可以正确地进行字符查找。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"这是一个中文测试字符串"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"中文"</span></span><span>;

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_stristr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"找到了子串!结果是:"</span></span><span> . </span><span><span class="hljs-variable">$result</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"没有找到子串。"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

输出将是:

<span><span>找到了子串!结果是:中文测试字符串
</span></span>

小结

mb_stristr 是一个强大的多字节字符串查找函数,特别适用于处理 UTF-8 或其他非 ASCII 字符集的字符串。它与 stristr 函数非常相似,主要区别在于它能够处理多字节字符,避免了字符集不兼容带来的问题。

通过正确使用 mb_stristr,你可以轻松地检测一个字符串中是否包含指定的子串,且不受字符大小写或字符编码的影响。希望通过本教程,你能更好地理解如何在 PHP 中利用 mb_stristr 进行字符串搜索。