Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah `strpos() === true` Memberi Keputusan Tidak Dijangka Apabila Menyemak Rentetan?
Mengapa Perbandingan Ketat strpos() dengan Benar Menghasilkan Keputusan Yang Tidak Dijangka?
Soalan:
Dalam kod yang diberikan, niatnya adalah untuk mencari sebarang rentetan yang tidak boleh diterima di dalam pembolehubah $pautan. Walau bagaimanapun, walaupun "https" terdapat dalam $link, kod tersebut mencetak "Boleh Diterima." Apakah sebab di sebalik tingkah laku yang tidak dijangka ini?
$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 />'; } }
Jawapan:
Penjelasan terletak pada sifat fungsi strpos(). Seperti yang didokumenkan, strpos() mengembalikan kedudukan berangka kejadian pertama $unacceptable dalam $link. Walau bagaimanapun, dalam kod asal, ia tidak betul dibandingkan dengan benar, yang mempunyai nilai boolean. Ini membawa kepada hasil yang tidak dijangka.
Untuk menyelesaikan masalah ini, perbandingan harus diubah suai untuk menyemak nilai bukan palsu. Dengan menggunakan !== false, kod akan mengenal pasti mana-mana rentetan yang tidak boleh diterima dengan betul.
// ... if (strpos($link, $unacceptable) !== false) {
Atas ialah kandungan terperinci Mengapakah `strpos() === true` Memberi Keputusan Tidak Dijangka Apabila Menyemak Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!