Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Persamaan Tegas dengan `strpos()` dalam PHP Selalunya Menghasilkan Keputusan yang Tidak Dijangka?

Mengapa Persamaan Tegas dengan `strpos()` dalam PHP Selalunya Menghasilkan Keputusan yang Tidak Dijangka?

Susan Sarandon
Lepaskan: 2024-12-16 15:18:20
asal
196 orang telah melayarinya

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

Perbandingan Boolean yang Tidak Boleh Dipercayai dalam PHP: Memahami Keistimewaan strpos()

Dalam PHP, fungsi strpos() ialah alat asas untuk mencari dalam rentetan. Walau bagaimanapun, perangkap biasa yang dihadapi oleh pengaturcara melibatkan membandingkan hasil strpos() menggunakan pengendali kesaksamaan yang ketat (===) dengan benar.

Isu:

Pertimbangkan coretan kod berikut:

$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

Kod ini cuba menyemak sama ada URL $link mengandungi sebarang daripada rentetan yang disenaraikan dalam $unacceptables. Walau bagaimanapun, ia secara tidak dijangka mencetak "Boleh Diterima!" untuk semua kes, walaupun apabila "https:" terdapat dalam $link.

Penyelesaian:

Punca isu terletak pada tingkah laku PHP untuk membandingkan hasilnya daripada strpos(). Secara lalai, strpos() mengembalikan integer yang mewakili kedudukan kejadian pertama subrentetan dalam rentetan. Jika subrentetan tidak ditemui, ia akan mengembalikan palsu.

Dalam coretan kod, apabila membandingkan strpos() dengan benar, anda pada asasnya menyemak sama ada hasilnya ialah nombor selain sifar. Memandangkan fungsi sentiasa mengembalikan nombor apabila ia menemui padanan, perbandingan ini sentiasa mengembalikan benar, dengan salah menunjukkan kehadiran subrentetan.

Untuk menyelesaikan masalah ini, gunakan pengendali ketaksamaan yang ketat (!==) sebaliknya, yang memeriksa ketidaksamarataan. Ini memastikan bahawa perbandingan dibuat terhadap palsu apabila subrentetan tidak ditemui.

// ...
if (strpos($link, $unacceptable) !== false) {
Salin selepas log masuk

Dengan mengikuti pengubahsuaian mudah ini, coretan kod akan mengenal pasti dan mencetak "Unacceptable Found" dengan betul apabila URL $link mengandungi satu daripada subrentetan yang dilarang.

Atas ialah kandungan terperinci Mengapa Persamaan Tegas dengan `strpos()` dalam PHP Selalunya Menghasilkan Keputusan yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan