Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah `strpos() === true` Memberi Keputusan Tidak Dijangka Apabila Menyemak Rentetan?

Mengapakah `strpos() === true` Memberi Keputusan Tidak Dijangka Apabila Menyemak Rentetan?

DDD
DDDasal
2024-12-29 09:44:16385semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn