Position actuelle: Accueil> Derniers articles> Pourquoi Stripos revient-il faux? Il y a clairement ce que je recherche dans la chaîne

Pourquoi Stripos revient-il faux? Il y a clairement ce que je recherche dans la chaîne

M66 2025-06-03

Dans PHP, la fonction StripOS est utilisée pour trouver l'emplacement où une chaîne apparaît d'abord dans une autre chaîne. Contrairement à STRPOS , STRPOS est insensible à la casse. Donc, lorsque nous utilisons des stripos dans notre code, s'il y a quelque chose que nous recherchons dans la chaîne, mais qu'il renvoie faux , pourquoi est-ce? Aujourd'hui, nous ferons une analyse approfondie.

1. Utilisation de base de la fonction Stripos

La syntaxe de base de la fonction Stripos est la suivante:

 stripos(string $haystack, string $needle, int $offset = 0): int|false
  • $ Haystack : la chaîne cible à rechercher.

  • $ aiguille : la sous-chaîne à trouver.

  • $ offset (facultatif): spécifie l'emplacement de départ de la recherche.

Cette fonction renvoie l'emplacement où la sous-chaîne $ aiguille apparaît d'abord dans $ haystack . S'il est trouvé, il renvoie la valeur d'index de cet emplacement; S'il n'est pas trouvé, il revient faux .

2. Pourquoi Stripos revient-il faux?

(1) L'aiguille n'est pas dans la botte de foin

Cela peut sembler simple, mais parfois nous ignorons les détails, tels que:

  • Vérifiez les espaces supplémentaires.

  • Si un jeu de caractères qui ne correspond pas est utilisé.

  • Si le codage des chaînes est cohérent.

Par exemple, supposons que nous recherchons le "exemple" de la sous-chaîne dans la chaîne "Exemple" . Bien que le contenu des deux chaînes soit le même, si le codage est incohérent ou contient des espaces supplémentaires, Stripos peut retourner faux .

 $haystack = "This is an example string";
$needle = "exAMPle";

$result = stripos($haystack, $needle);

if ($result === false) {
    echo "Aucune chaîne trouvée!";
} else {
    echo "Trouvez la chaîne,L'emplacement est: " . $result;
}

Ici, bien que "l'exemple" existe réellement dans "Ceci est un exemple de chaîne" , Stripos peut toujours retourner faux si l'aiguille ne correspond pas exactement au cas ou à l'espace de la botte de foin .

(2) Problèmes d'URL

Parfois, si l'URL est incluse dans la chaîne de recherche, la raison pour laquelle Stripos renvoie False peut être dû au formatage de l'URL. Par exemple, si le nom de domaine de l'URL ne correspond pas exactement, ou qu'il y a des caractères supplémentaires avant et après, cela peut également faire échouer le match.

Supposons que nous ayons le code suivant:

 $haystack = "Visit us at https://www.m66.net/welcome";
$needle = "m66.net";

$result = stripos($haystack, $needle);

if ($result === false) {
    echo "Aucune URL n'a été trouvée!";
} else {
    echo "Trouvez l'URL,L'emplacement est: " . $result;
}

Dans cet exemple, nous voulons trouver la chaîne m66.net . Si $ Haystack et $ aigule correspondent exactement et qu'il n'y a pas d'autres caractères interférents, Stripos devrait être en mesure de renvoyer la valeur d'index trouvé. Cependant, si l'URL est incorrectement épissée ou contient des caractères supplémentaires (tels que des barres obliques ou des espaces supplémentaires), cela peut entraîner l'échec de la recherche.

3. Solution

(1) Vérifiez si la chaîne correspond exactement

Assurez-vous que la chaîne que vous recherchez est exempte de caractères ou d'espaces inattendus. Vous pouvez utiliser la fonction TRIM () pour supprimer les caractères d'espace blanc aux deux extrémités de la chaîne, ou utiliser strtolower () pour un cas uniformément.

 $haystack = "Visit us at https://www.m66.net/welcome";
$needle = "m66.net";

$haystack = trim($haystack);
$needle = strtolower($needle);

$result = stripos($haystack, $needle);

(2) normalisation du format URL

Si votre code implique la correspondance des URL, assurez-vous que votre format URL est uniforme. Si vous ne vous souciez que de la partie du nom de domaine, vous pouvez extraire la partie du nom de domaine de l'URL avant de correspondre.

 $haystack = "Visit us at https://www.m66.net/welcome";
$needle = "m66.net";

// utiliser parse_url Extraire le nom de domaine
$parsed_url = parse_url($haystack, PHP_URL_HOST);

$result = stripos($parsed_url, $needle);

if ($result !== false) {
    echo "Trouver le nom de domaine!";
} else {
    echo "未Trouver le nom de domaine!";
}

4. Résumé

La raison pour laquelle Stripos renvoie false est généralement lié au format de la chaîne cible et de la sous-chaîne. Que ce soit parce que la chaîne ne correspond pas exactement, ou en raison du format URL ou d'autres facteurs, comprendre ces détails et effectuer un prétraitement de chaîne approprié peut nous aider à éviter ce problème.

J'espère que cet article sera utile pour que vous compreniez l'utilisation des fonctions Stripos ! Si vous rencontrez des problèmes de correspondance de chaînes similaires, vous pourriez aussi bien vérifier le format et le contenu des chaînes pour vous assurer qu'ils sont corrects.