Beim Versuch festzustellen, ob eine Zeichenfolge ein unerwünschtes Element enthält, können Programmierer auf unerwartete Ergebnisse stoßen, wenn sie strpos() direkt verwenden Gleichstellungsvergleiche.
Bedenken Sie dies Szenario:
$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 />'; } }
Interessanterweise gibt dieser Code „Akzeptabel!“ aus. für jedes Element in $inacceptables, obwohl https in $link vorhanden ist. Dieses scheinbar paradoxe Verhalten ergibt sich aus der Natur von strpos() selbst.
Ein Blick in die offizielle PHP-Dokumentation verdeutlicht den wahren Zweck der Funktion:
Gibt die numerische Position des ersten Vorkommens von Needle in zurück Heuhaufen-Zeichenfolge.
Wenn Sie also das Ergebnis von strpos() direkt mit true vergleichen, überprüfen Sie effektiv die Existenz von unerwünschtes Element in $link, nicht seine Gleichheit mit true.
Um dieses Problem zu beheben, besteht ein geeigneterer Ansatz darin, !== false in der if-Anweisung zu verwenden:
// ... if (strpos($link, $unacceptable) !== false) {
Auf diese Weise So beurteilen Sie richtig, ob strpos() das Vorhandensein des unerwünschten Elements erkannt hat, was zum gewünschten Ergebnis führt.
Das obige ist der detaillierte Inhalt vonWarum kann der Vergleich von „strpos()' mit „true' das Auftreten von Zeichenfolgen in PHP nicht erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!