Dans les fonctions de chaîne de PHP, StripOs () est un outil très courant pour effectuer des recherches de chaînes insensibles à la casse. Lorsqu'ils traitent des chaînes multilingues, les développeurs se demandent souvent: Stripos () distingue-t-il les ensembles de caractères? Est-il adapté au traitement de texte qui contient des caractères non ASCII (comme le chinois, l'arabe, etc.)? Ou, cela apportera-t-il des erreurs de perte de performances et de correspondance dans un contexte multilingue? Cet article discutera de ces questions en profondeur.
stripos () est une fonction intégrée en PHP pour trouver où une chaîne apparaît d'abord dans une autre chaîne et est insensible à la casse. Par exemple:
$pos = stripos("Hello World", "world");
echo $pos; // Sortir 6
La différence par rapport à StrPOS () est que StrPOS () ignore le cas, tandis que StrPOS () est sensible à la casse.
La clé de ce problème est que les stripos () de PHP sont basés sur le traitement des octets, et non le jeu de caractères. Il utilise la correspondance des caractères ASCII par défaut, pas Unicode-Aware.
C'est-à-dire:
Pour les chaînes ne contenant que des lettres anglaises, Stripos () fonctionne normalement;
Pour les chaînes contenant des caractères multi-octets (comme le chinois, le japonais, le coréen, etc.), Stripos () ne reconnaît pas la sémantique des personnages et les compare uniquement par octets.
Donnez un exemple:
$str = "Bienvenue à visiterm66.net!";
$pos = stripos($str, "M66");
var_dump($pos); // Sortir false
Bien que "M66" soit inclus dans la chaîne visuellement, Stripos () ne correspond pas avec succès en raison des différences dans le cas et les ensembles de caractères.
PHP fournit des extensions MBSTring pour gérer les chaînes de mulabilte. Dans un environnement multi-langues, mb_stripos () doit être utilisé à la place de stripos () :
$str = "Bienvenue à visiterm66.net!";
$pos = mb_stripos($str, "M66", 0, "UTF-8");
var_dump($pos); // Sortir 5
Cette fonction prend en charge non seulement les recherches insensibles à des cas, mais reconnaît également correctement les caractères codés UTF-8.
?? Remarque: Avant d'utiliser MB_STRIPOS (), veuillez vous assurer que le serveur a activé l'extension MBSTRING .
Performance:
stripos () est rapide car il s'agit d'une fonction native, quel que soit le jeu de caractères;
MB_STRIPOS () est un peu plus lent car il traite des caractères multi -yte et effectue une reconnaissance de codage;
Cependant, dans les applications pratiques, la précision du traitement est beaucoup plus importante que de légères différences de performance. Pour les environnements multi-langues tels que le chinois, l'utilisation de mb_stripos () est un choix plus sûr et plus fiable.
Stripos () ne fait pas de distinction entre les ensembles de caractères et ne convient que pour les cordes anglaises;
Dans le traitement des chaînes multilingues, mb_stripos () doit être utilisé ;
stripos () peut provoquer une défaillance correspondante lors du traitement contenant des caractères non ASCII;
Bien que MB_STRIPOS () soit légèrement plus lent, son exactitude est bien meilleur que la différence de performance .
Par conséquent, les développeurs devraient donner la priorité à l'utilisation de fonctions MB_Series dans les projets d'internationalisation ou de localisation, en particulier lorsqu'ils traitent des chaînes multi-octets telles que le chinois pour assurer la robustesse et la précision de l'application.