当前位置: 首页> 最新文章列表> 使用mb_strstr函数从字符串中删除指定部分的实用技巧和方法

使用mb_strstr函数从字符串中删除指定部分的实用技巧和方法

gitbox 2025-08-26

在PHP中,处理字符串时,很多时候我们需要从一个字符串中删除特定的部分。mb_strstr() 函数是一个多字节字符集处理函数,它在处理非ASCII字符时特别有用。本文将介绍如何利用 mb_strstr() 函数从字符串中删除指定部分。

1. mb_strstr() 函数简介

mb_strstr() 是一个多字节字符串函数,它与常规的 strstr() 函数类似,但是它是专为多字节字符集(如UTF-8、Shift-JIS等)设计的。因此,当我们需要处理包含非英语字符的字符串时,mb_strstr() 会更为稳定和可靠。

语法:

<span><span><span class="hljs-title function_ invoke__">mb_strstr</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,则返回 needle 前的部分,否则返回 needle 及其后的部分。

  • $encoding(可选):指定字符编码,默认为 mb_internal_encoding()

2. 从字符串中删除指定部分

假设我们有一个字符串,我们希望删除其中的一部分。我们可以利用 mb_strstr() 找到该部分,然后通过字符串操作将其去除。

示例:从字符串中删除指定的子字符串

假设我们有以下字符串:

<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"我喜欢学习PHP编程"</span></span><span>;
</span></span>

我们希望删除 "学习" 这个部分,可以先使用 mb_strstr() 查找这个子字符串的位置,然后进行相应的处理。

代码实现:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$str</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">"学习"</span></span><span>;

</span><span><span class="hljs-comment">// 使用mb_strstr查找"学习"出现的位置</span></span><span>
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_strstr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);

</span><span><span class="hljs-comment">// 如果找到了"学习",则去除该部分</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$position</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// 删除字符串中的"学习"部分</span></span><span>
    </span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-title function_ invoke__">mb_strpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>)) . </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-title function_ invoke__">mb_strpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) + </span><span><span class="hljs-title function_ invoke__">mb_strlen</span></span><span>(</span><span><span class="hljs-variable">$needle</span></span><span>));
    </span><span><span class="hljs-keyword">echo</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>我喜欢PHP编程
</span></span>

3. 使用 mb_strstr() 删除子字符串后面的部分

如果我们仅想删除子字符串后的部分,可以利用 mb_strstr() 函数的 before_needle 参数。

示例:删除子字符串后的部分

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$str</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">"学习"</span></span><span>;

</span><span><span class="hljs-comment">// 获取"学习"前的部分</span></span><span>
</span><span><span class="hljs-variable">$before</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_strstr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$before</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

结果:

<span><span>我喜欢
</span></span>

4. 删除多个子字符串的示例

如果我们需要从字符串中删除多个不同的子字符串,可以将 mb_strstr() 和其他字符串操作函数结合使用。我们可以通过循环和正则表达式来高效地完成任务。

示例:删除多个子字符串

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"我喜欢学习PHP编程和Web开发"</span></span><span>;
</span><span><span class="hljs-variable">$needles</span></span><span> = [</span><span><span class="hljs-string">"学习"</span></span><span>, </span><span><span class="hljs-string">"Web"</span></span><span>];

</span><span><span class="hljs-comment">// 删除多个子字符串</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$needles</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>) {
    </span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</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">$str</span></span><span>);
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

结果:

<span><span>我喜欢PHP编程和开发
</span></span>

5. 注意事项

  • mb_strstr() 是针对多字节字符集优化的,通常在处理包含中文、日文、韩文等字符集时,它的表现要优于常规的 strstr()

  • 处理多字节字符时,需确保指定了正确的编码格式,否则可能导致结果不准确。

  • 在某些情况下,结合使用 mb_substr()mb_strpos(),可以精确控制字符串的删除位置。

结语

通过 mb_strstr() 函数,我们可以方便地从字符串中删除指定部分,尤其在多字节字符集的场景下,其效果非常显著。了解并掌握这些技巧,不仅可以让你在处理字符串时更加高效,也能够避免一些常见的编码问题。