Dans la programmation PHP, stripos () est une fonction de recherche de chaîne très courante. Il est utilisé pour trouver la première occurrence d'une chaîne dans la chaîne cible sans sensibilité à la casse. De nombreux développeurs peuvent s'inquiéter d'un problème lorsqu'ils traitent avec des chaînes multilingues ou contenant du contenu chinois:
Cet article discutera de ce problème et le vérifiera via un exemple de code.
La signature de la fonction de stripos () est la suivante:
int|false stripos(string $haystack, string $needle, int $offset = 0)
Il renvoie la position où $ aiguille apparaît d'abord dans $ Haystack (à partir de 0), et s'il n'est pas trouvé, il renvoie faux . Cette fonction n'est pas sensible à la casse.
$haystack = "Hello World!";
$needle = "world";
$pos = stripos($haystack, $needle);
echo $pos; // Sortir 6
La question clé est: les stripos () peuvent-ils correspondre avec précision lorsque $ Haystack ou $ aigule incluent le chinois?
La réponse est: elle peut correspondre normalement, mais faites attention au codage de la chaîne.
Les stripos () de PHP sont appariés sur la base des octets, et non basés sur les niveaux de caractère. Cela signifie que lors de l'utilisation de StripOs () pour traiter les cordes chinoises codées UTF-8, si $ aigule est chinois ou que la botte de foin contient des caractères chinois, ce n'est généralement pas un problème tant que le codage reste cohérent.
Testons le comportement de la correspondance chinoise à travers quelques exemples:
// UTF-8 Chaîne codée
$haystack = "Bienvenue à visiter m66.net site web";
$needle = "m66.net";
// Trouver l'anglais
$pos = stripos($haystack, $needle);
echo $pos !== false ? "Trouvé,L'emplacement est:$pos" : "Pas trouvé"; // Sortir:Trouvé,L'emplacement est:5
// Trouver le chinois
$haystack = "Bienvenue à visiter m66.net site web";
$needle = "site web";
$pos = stripos($haystack, $needle);
echo $pos !== false ? "Trouvé,L'emplacement est:$pos" : "Pas trouvé"; // Sortir:Trouvé,L'emplacement est:15
Comme vous pouvez le voir, Stripos () fonctionne normalement, qu'il soit à la recherche de l'anglais ou du chinois.
Bien que Stripos () n'ait généralement aucun problème au chinois, il y a encore plusieurs points à noter:
Assurez-vous que le codage des chaînes est cohérent : PHP par défaut correspond aux octets. Si $ Haystack est UTF-8 et $ l'aiguille est GB2312 et d'autres formats de codage, cela peut entraîner une défaillance correspondante.
Il est recommandé d'utiliser MB_STRIPOS () lors du traitement des chaînes multi-octets : si vous avez besoin de gérer le contenu multi-language plus sûr, en particulier les caractères d'Asie de l'Est (Chine, Japon et Corée du Sud), il est recommandé d'utiliser MB_STRIPOS () , qui est une fonction dans l'extension MBSTRING , conçue pour les chaînes multi-youte.
Exemple:
$haystack = "Bienvenue à visiter m66.net site web";
$needle = "site web";
$pos = mb_stripos($haystack, $needle, 0, 'UTF-8');
echo $pos !== false ? "Trouvé,L'emplacement est:$pos" : "Pas trouvé";
Utilisez stripos () pour déterminer si une chaîne contenant chinois contient une certaine sous-chaîne ne provoquera pas d'erreur de correspondance si le codage est correct. Cependant, pour une meilleure compatibilité multilingue, il est recommandé d'utiliser MB_STRIPOS () dans votre projet.
Dans tous les cas, gardez toujours les cordes uniformément codées (généralement UTF-8) pour éviter les tracas inutiles.