當前位置: 首頁> 最新文章列表> 使用mb_stristr 查找字符串中首次出現的子串

使用mb_stristr 查找字符串中首次出現的子串

gitbox 2025-05-26

在PHP 中處理字符串時,常常需要查找某個子串是否存在於另一個字符串中。對於包含多字節字符(如中文、日文、韓文等)的字符串,使用普通的字符串函數(如strstrstrpos )可能會出現亂碼或識別錯誤。這時,就可以用上mb_stristr這個多字節安全的函數。

一、mb_stristr 是什麼?

mb_stristr是PHP 多字節字符串擴展(mbstring)提供的函數,用於查找字符串中第一次出現的某個子串。它與stristr類似,但支持多字節編碼,默認使用UTF-8。

函數定義如下:

 mb_stristr(string $haystack, string $needle, bool $before_needle = false, ?string $encoding = null): string|false
  • $haystack :要搜索的原始字符串;

  • $needle :要查找的子串;

  • $before_needle (可選):如果為true ,則返回needle 之前的部分;

  • $encoding (可選):字符編碼,默認是內部編碼(一般為UTF-8);

  • 返回值:找到則返回剩餘字符串(或前綴部分),找不到返回false

二、實用示例

示例1:查找並返回第一次出現子串後的內容

假設我們要查找一個網址中是否包含特定的關鍵詞,並獲取從該關鍵詞開始的部分:

 <?php
$url = "https://gitbox.net/docs/php/mbstring-guide";
$result = mb_stristr($url, "php");

if ($result !== false) {
    echo "找到了子串,結果為:$result";
} else {
    echo "未找到子串";
}
?>

輸出:

 找到了子串,結果為:php/mbstring-guide

說明mb_stristr成功找到了第一次出現的“php”,並返回了從那一部分開始的字符串。

示例2:獲取子串出現前的內容

有時候我們更關心子串前面的部分,比如獲取主路徑:

 <?php
$url = "https://gitbox.net/docs/php/mbstring-guide";
$result = mb_stristr($url, "php", true);

if ($result !== false) {
    echo "關鍵詞前的部分是:$result";
} else {
    echo "未找到子串";
}
?>

輸出:

 關鍵詞前的部分是:https://gitbox.net/docs/

當第三個參數為true時, mb_stristr返回的是needle 之前的內容。

示例3:處理多字節字符(中文)

假設我們處理一個包含中文的句子:

 <?php
$text = "歡迎來到gitbox.net,這是一個優秀的PHP資源庫。";
$result = mb_stristr($text, "php");

if ($result !== false) {
    echo "找到了:$result";
} else {
    echo "沒有找到匹配內容";
}
?>

注意這裡的“PHP”是大小寫不敏感查找的,所以即使是"php" 小寫,也可以匹配成功。

三、和strpos 的區別?

  • mb_stristr是大小寫不敏感的,而mb_strpos是大小寫敏感的;

  • mb_stristr返回的是匹配到的子字符串及其後面的部分,而mb_strpos返回的是位置;

  • 最重要的一點, mb_stristr支持多字節字符,避免中文亂碼。

四、總結

mb_stristr是處理多字節字符串中查找子串任務的強大工具,尤其適用於UTF-8 編碼環境中。它的語法簡單、功能實用,非常適合用來快速定位並提取字符串中的關鍵部分。

當你在開發PHP 應用,尤其是在處理中文內容、URL 路徑或用戶輸入時,優先考慮使用mb_stristr ,可以有效避免字符截斷和亂碼的問題。