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
Lepaskan: 2024-12-29 09:44:16
asal
416 orang telah melayarinya

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 />';
    }
}
Salin selepas log masuk

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) {
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan