Dans PHP, Stripos et MB_stripos sont tous deux des fonctions utilisées pour trouver l'emplacement des sous-chaînes, mais elles ont des différences significatives. Cet article discutera de leurs différences, de leurs scénarios applicables et de leurs différences de performance en détail.
Stripos : Il s'agit d'une fonction intégrée en PHP pour trouver où une chaîne apparaît d'abord dans une autre chaîne. Il est insensible à la casse et est basé sur un codage à un octet, adapté aux chaînes ASCII ordinaires.
$haystack = "Hello world!";
$needle = "world";
$pos = stripos($haystack, $needle); // s'avérer 6
MB_STRIPOS : Cette fonction provient de l'extension de chaîne multi-octets (MBSTring). Sa fonction est similaire à Stripos . Il est également utilisé pour trouver l'emplacement d'une sous-chaîne et est insensible à la casse. Contrairement à Stripos , MB_STRIPOS convient à la gestion des jeux de caractères mulabyte, tels que UTF-8, GBK, etc. Il s'agit d'une optimisation pour les chaînes codées à plusieurs gobets.
$haystack = "Bonjour,monde!";
$needle = "monde";
$pos = mb_stripos($haystack, $needle); // s'avérer 3
Support de codage:
Stripos ne fonctionne qu'avec des chaînes codées à un octets (comme ASCII), ce qui signifie qu'il ne fonctionne pas avec des chaînes qui gèrent UTF-8 ou d'autres jeux de caractères multi-lyte.
MB_STRIPOS est conçu spécifiquement pour le codage multi-gytet (tel que UTF-8, GBK, etc.), de sorte que les chaînes contenant des caractères multi-lyte peuvent être traitées correctement.
Différences de performance:
Pour les chaînes ASCII ordinaires, Stripos fonctionne mieux que MB_STRIPOS car MB_stripos nécessite des frais généraux supplémentaires pour gérer les jeux de caractères multi -yte.
Si la chaîne traitée est UTF-8 ou d'autres jeux de caractères multi -yte, MB_STRIPOS est essentiel car Stripos ne peut pas gérer ces jeux de caractères correctement.
Scénarios utilisant des stripos :
Le codage des chaînes est un octet unique (comme le codage ASCII), et vous pouvez utiliser des stripos pour trouver efficacement les sous-chaînes.
Stripos est un choix approprié lorsqu'il s'agit de caractères anglais ou de cordes ASCII simples.
Scénarios utilisant MB_stripos :
Le codage des chaînes est multi-octets, tel que UTF-8, GBK, BIG5, etc. Vous devez utiliser MB_STRIPOS pour trouver correctement les sous-chaînes.
Lors du traitement des chaînes contenant des caractères multi-octets tels que chinois, japonais et coréen, vous devez utiliser MB_stripos .
Stripos est une fonction plus légère en termes de performances, surtout lorsque la chaîne est encodée ASCII, elle sera plus rapide car elle n'a pas besoin de considérer la longueur d'octets du caractère. Cependant, lorsqu'il s'agit de caractères multilinants (tels que des cordes chinoises codées par UTF-8), MB_stripos est nécessaire, ce qui sera légèrement plus lent en raison de la complexité des caractères multi-gytets.
<?php
$haystack = "This is a test string.";
$needle = "test";
$position = stripos($haystack, $needle);
if ($position !== false) {
echo "Found '$needle' at position $position";
} else {
echo "Not found";
}
?>
<?php
$haystack = "Bonjour,monde!";
$needle = "monde";
$position = mb_stripos($haystack, $needle);
if ($position !== false) {
echo "Found '$needle' at position $position";
} else {
echo "Not found";
}
?>
Stripos convient aux jeux de caractères à un octets (tels que ASCII) et a de bonnes performances.
MB_STRIPOS convient aux jeux de caractères multi -yte (tels que UTF-8, GBK, etc.), qui gère correctement ces caractères.
Stripos est plus efficace lorsqu'il s'agit de caractères anglais ou ASCII; MB_STRIPOS est utilisé lorsqu'il s'agit de caractères chinois ou d'autres caractères multi-gytets.