Maison > développement back-end > tutoriel php > Pourquoi la comparaison de « strpos() » à « true » ne parvient-elle pas à détecter les occurrences de chaîne en PHP ?

Pourquoi la comparaison de « strpos() » à « true » ne parvient-elle pas à détecter les occurrences de chaîne en PHP ?

Susan Sarandon
Libérer: 2024-12-10 08:29:10
original
338 Les gens l'ont consulté

Why Does Comparing `strpos()` to `true` Fail to Detect String Occurrences in PHP?

Interprétation erronée de la comparaison stricte de strpos() avec true

En tentant de déterminer si une chaîne contient un élément indésirable, les programmeurs peuvent rencontrer des résultats inattendus lors de l'utilisation de strpos() à des fins directes. comparaisons d'égalité.

Considérez ceci scénario :

$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 />';
    }
}
Copier après la connexion

Curieusement, ce code affiche « Acceptable ! » pour chaque élément dans $inacceptables, bien que https soit présent dans $link. Ce comportement apparemment paradoxal découle de la nature de strpos() elle-même.

Plonger dans la documentation officielle PHP clarifie le véritable objectif de la fonction :

Renvoie la position numérique de la première occurrence de l'aiguille dans le chaîne de botte de foin.

Par conséquent, lorsque vous comparez directement le résultat de strpos() avec true, vous vérifiez effectivement l'existence de l'élément indésirable dans $link, pas son égalité avec true.

Pour résoudre ce problème, une approche plus appropriée consiste à utiliser !== false dans l'instruction if :

// ...
if (strpos($link, $unacceptable) !== false) {
Copier après la connexion

Ce faisant, vous évaluer correctement si strpos() a détecté la présence de l'élément indésirable, entraînant le résultat souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal