為什麼 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中文網其他相關文章!