首頁 >後端開發 >php教程 >為什麼在檢查字串時 `strpos() === true` 會給出意外的結果?

為什麼在檢查字串時 `strpos() === true` 會給出意外的結果?

DDD
DDD原創
2024-12-29 09:44:16389瀏覽

Why Does `strpos() === true` Give Unexpected Results When Checking for Strings?

為什麼 strpos() 與 True 的嚴格比較會產生意外結果?

問題:

在給定的程式碼中,目的是找出裡面任何不可接受的字串$link 變數。但是,即使 $link 中存在“https”,程式碼也會列印“Acceptable”。這種意外行為背後的原因是什麼?

$link = 'https://google.com';
$unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'];

foreach ($unacceptables as $unacceptable) {
    if (strpos($link, $unacceptable) === true) {
        echo 'Unacceptable Found<br />';
    } else {
        echo 'Acceptable!<br />';
    }
}

答案:

解釋在於 strpos() 函數的本質。如文件所述,strpos() 傳回 $link 中 $unacceptable 第一次出現的數位位置。但是,在原始程式碼中,它與具有布林值的 true 進行了錯誤的比較。這會導致意外結果。

要解決此問題,應修改比較以檢查非 false 值。透過使用 !== false,程式碼將正確識別任何發現的不可接受的字串。

// ...
if (strpos($link, $unacceptable) !== false) {

以上是為什麼在檢查字串時 `strpos() === true` 會給出意外的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn