首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 字符串包含判斷四大函數對比:strstr/stristr/strpos/爆炸法

     編輯:PHP 綜合知識

函數對比表

函數返回值大小寫多字節安全速度推薦場景
strstr子串到結尾 / false敏感❌中需獲取後綴內容
stristr子串到結尾 / false不敏感❌中不分大小寫搜索
strpos位置 int / false敏感❌最快純判斷存在性
mb_strpos位置 int / false敏感✅快UTF-8 中文判斷
preg_match1/0/false可選✅慢複雜模式

代碼示範

<?php
$haystack = 'Hello World';

// 1. strstr
$domain = strstr($haystack, ' '); // ' World'
if (strstr($haystack, 'World')) { /* 存在 */ }

// 2. stristr (不分大小寫)
if (stristr($haystack, 'world')) { /* 存在 */ }

// 3. strpos (最快,嚴格判斷)
if (strpos($haystack, 'World') !== false) { /* 存在 */ }
// ❌ 錯誤:if (strpos(...)) 會在位置 0 時判為 false

// 4. 爆炸法(教學用,不推薦生產)
function containsExplode(string $haystack, string $needle): bool {
    return count(explode($needle, $haystack)) > 1;
}

多字節安全最佳實踐

<?php
mb_internal_encoding('UTF-8');

$str = '包含中文的字符串';
if (mb_strpos($str, '中文') !== false) { /* 存在 */ }
if (mb_stripos($str, '中文') !== false) { /* 不分大小寫 */ } // PHP 8+

// 正則邊界匹配
if (preg_match('/\b中文\b/u', $str)) { /* 獨立詞 */ }

避坑指南

  • 永遠用 !== false 判斷 strpos/mb_strpos。
  • UTF-8 環境強制用 mb_* 系列,或開啟 mbstring.func_overload(PHP 8.2+ 移除)。
  • 大數據高頻判斷考慮 Bloom Filter / Trie 樹。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved