當前位置: 首頁> 最新文章列表> 如何使用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進行字符串搜索。