Dalam cuba menentukan sama ada rentetan mengandungi elemen yang tidak diingini, pengaturcara mungkin menemui hasil yang tidak dijangka apabila menggunakan strpos() untuk langsung perbandingan kesaksamaan.
Pertimbangkan ini senario:
$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 />'; } }
Menariknya, kod ini mencetak "Boleh Diterima!" untuk setiap elemen dalam $unacceptables, walaupun https terdapat dalam $link. Tingkah laku yang kelihatan paradoks ini timbul daripada sifat strpos() itu sendiri.
Menyelidiki dokumentasi PHP rasmi menjelaskan tujuan sebenar fungsi:
Mengembalikan kedudukan angka kejadian pertama jarum dalam rentetan tumpukan jerami.
Oleh itu, apabila membandingkan hasil strpos() secara langsung dengan benar, anda dengan berkesan menyemak kewujudan elemen yang tidak diingini dalam $link, bukan kesamaan dengan benar.
Untuk membetulkan isu ini, pendekatan yang lebih sesuai ialah menggunakan !== false dalam pernyataan if:
// ... if (strpos($link, $unacceptable) !== false) {
Dengan berbuat demikian, anda menilai dengan betul sama ada strpos() telah mengesan kehadiran unsur yang tidak diingini, mengakibatkan yang diingini hasil.
Atas ialah kandungan terperinci Mengapa Membandingkan `strpos()` dengan `true` Gagal Mengesan Kejadian Rentetan dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!