W3docs

stripos()

La fonction stripos() en PHP recherche la position de la première occurrence d'une sous-chaîne dans une chaîne, sans tenir compte de la casse.

Introduction

stripos() trouve la position de la première occurrence d'une sous-chaîne dans une chaîne, sans tenir compte de la casse. Elle retourne l'index de base zéro où la correspondance commence, ou false si la sous-chaîne est absente.

Le i dans le nom signifie insensible à la casse : "PHP", "php" et "Php" correspondent tous de la même façon. Si vous avez besoin d'une recherche sensible à la casse, utilisez strpos(). Cette page couvre la syntaxe, le piège classique de !== false, le paramètre optionnel $offset, et comment stripos() se situe par rapport aux autres fonctions de position.

Syntaxe

stripos(string $haystack, string $needle, int $offset = 0): int|false
ParamètreDescription
$haystackLa chaîne dans laquelle effectuer la recherche.
$needleLa sous-chaîne à rechercher.
$offsetOptionnel. L'index dans $haystack à partir duquel la recherche commence. Par défaut 0 (le début). Un offset négatif compte à partir de la fin de la chaîne.

Valeur de retour : la position de base zéro de la première correspondance (un int), ou false si $needle n'est pas trouvé.

Un exemple de base

php— editable, runs on the server

L'aiguille "fox" est en minuscules mais la botte de foin contient "FOX". Comme stripos() ignore la casse, elle trouve quand même la correspondance et affiche :

Found 'fox' at position 16

Utilisez strpos() à la place et le résultat serait false, car les casses diffèrent.

Le piège de !== false

C'est le bug le plus courant avec stripos() (et toutes les fonctions *pos()). Lorsqu'une correspondance est trouvée au tout début de la chaîne, la valeur retournée est 0 — et 0 est falsy en PHP. Une vérification lâche comme if (stripos(...)) traiterait une vraie correspondance comme « non trouvée » :

<?php

$pos = stripos("Hello world", "hello");

// Wrong: 0 is falsy, so this branch runs even though there IS a match
if ($pos) {
  echo "loose check: found\n";
} else {
  echo "loose check: NOT found (wrong!)\n";
}

// Correct: compare against false with the strict !== operator
if ($pos !== false) {
  echo "strict check: found at position $pos\n";
} else {
  echo "strict check: not found\n";
}

Sortie :

loose check: NOT found (wrong!)
strict check: found at position 0

Comparez toujours le résultat avec !== false quand vous voulez seulement savoir si la sous-chaîne existe.

Utilisation du paramètre $offset

Le troisième argument vous permet de commencer la recherche en cours de chaîne — pratique pour trouver la deuxième occurrence (ou une suivante) :

<?php

$text = "PHP is great. PHP is everywhere.";

$first  = stripos($text, "php");        // start at 0
$second = stripos($text, "php", $first + 1); // skip past the first match

echo "First occurrence:  $first\n";
echo "Second occurrence: $second\n";

Sortie :

First occurrence:  0
Second occurrence: 14

Un cas pratique : filtre de mots-clés insensible à la casse

Comme elle ignore la casse, stripos() est idéale pour les vérifications du type « ce texte mentionne-t-il X ? », par exemple pour signaler les messages contenant un mot interdit quelle que soit la façon dont il est écrit :

<?php

$message = "Get this AMAZING deal now!";
$banned  = ["amazing", "free", "winner"];

foreach ($banned as $word) {
  if (stripos($message, $word) !== false) {
    echo "Blocked: contains '$word'\n";
    break;
  }
}

Sortie :

Blocked: contains 'amazing'

Fonctions associées

FonctionCasseRecherche depuis
stripos()InsensibleDébut → première correspondance
strpos()SensibleDébut → première correspondance
strripos()InsensibleFin → dernière correspondance
stristr()InsensibleRetourne la sous-chaîne correspondante, pas sa position

Voir aussi substr() pour extraire du texte une fois que vous avez une position, et str_replace() pour les remplacements sensibles à la casse.

Conclusion

stripos() retourne la position de base zéro de la première correspondance insensible à la casse d'une sous-chaîne, ou false s'il n'y en a pas. N'oubliez pas de tester le résultat avec !== false pour qu'une correspondance en position 0 ne soit pas confondue avec « non trouvé », utilisez $offset pour trouver les occurrences suivantes, et optez pour strpos() quand la casse est importante.

Pratique

Pratique
Que fait la fonction stripos() en PHP ?
Que fait la fonction stripos() en PHP ?
Was this page helpful?