strpos vs mb_strpos
php查詢子字串
在php裡面,判斷某個字串裡面是否存在某個子串,可以用strpos
,官方手冊
在這裡
strpos
如果strpos沒找到子串,則會返回FALSE,需要用===
來判斷是否未找到子串。若找到子串,則會返回該子串第一次出現的位置。
看如下示例程式碼
$str = 'abcdefg'; $result = strpos($str, 'a'); var_dump($result); if (false == $result) { echo "find failed\n"; } else { echo "find success\n"; } if (false === $result) { echo "find failed\n"; } else { echo "find success\n"; }
列印結果是:
int(0) find failed find success
從上方程式碼可見,==
與===
的列印結果不一樣,因為0被轉換為布林型別時,被認為是false。
mb_strpos
我在之前一篇筆記計算字串長度裡面,已經寫到過mbstring
的mb_strlen
一些用法
$str = 'abc中文defg'; $result = strpos($str, '文'); var_dump($result);
看下列印結果是:
int(6)
我的php環境預設的編碼是ISO-8559-1
,在這個編碼裡面,中文佔2個位元組,而strpos是按位元組查詢的,結果是6與我想要的4不符,需要使用mb_strpos來查詢。
$str = 'abc中文defg'; $result = mb_strpos($str, '文', 0, "UTF8"); var_dump($result);
看下列印結果是:
int(4)