首頁 > 後端開發 > php教程 > 為什麼 PHP 中的「strpos()」嚴格相等常常會產生意想不到的結果?

為什麼 PHP 中的「strpos()」嚴格相等常常會產生意想不到的結果?

Susan Sarandon
發布: 2024-12-16 15:18:20
原創
196 人瀏覽過

Why Does Strict Equality with `strpos()` in PHP Often Produce Unexpected Results?

PHP 中不可靠的布林比較:了解strpos() 的怪癖

在PHP 中,strpos() 函數是一個基本工具在字串內搜尋。然而,程式設計師遇到的一個常見陷阱是將使用嚴格相等運算子 (===) 的 strpos() 的結果與 true 進行比較。

問題:

考慮以下程式碼片段:

$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 />';
    }
}
登入後複製

此程式碼嘗試檢查$link URL 是否包含中列出的任何字串$不可接受的。然而,它意外地列印出「可接受!」對於所有情況,即使 $link 中存在「https:」。

解決方案:

問題的根源在於 PHP 比較結果的行為strpos() 的。預設情況下,strpos() 傳回一個整數,表示子字串在字串中第一次出現的位置。如果未找到子字串,則傳回 false。

在程式碼片段中,將 strpos() 與 true 進行比較時,實際上是在檢查結果是否為非零數字。由於函數在找到匹配項時始終傳回一個數字,因此此比較始終傳回 true,從而錯誤地指示子字串的存在。

要解決此問題,請改用嚴格不等運算子 (!==),該運算子檢查不相等性。這可確保在未找到子字串時進行與 false 的比較。

// ...
if (strpos($link, $unacceptable) !== false) {
登入後複製

透過執行此簡單修改,當 $link URL 包含一個時,程式碼片段將正確識別並列印「Unacceptable Found」禁止的子字串。

以上是為什麼 PHP 中的「strpos()」嚴格相等常常會產生意想不到的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板