Position actuelle: Accueil> Derniers articles> Conseils pour l'utilisation de la fonction substr_count sous Encoding de caractères multipleste

Conseils pour l'utilisation de la fonction substr_count sous Encoding de caractères multipleste

gitbox 2025-06-03

Dans PHP, la fonction substr_count () est largement utilisée pour calculer le nombre de fois qu'une sous-chaîne apparaît dans une chaîne. Il est très efficace lorsqu'il s'agit de caractères ASCII, mais peut avoir des résultats inattendus face à des encodages de caractères multi-octets tels que UTF-8. Cet article introduira les compétences pratiques de substr_count () lors de la gestion des personnages multi-gobets et vous aidera à éviter les pièges dans le développement à travers des exemples spécifiques.

1. Examen de l'utilisation de base

La syntaxe de base de substr_count () est la suivante:

<code> int substr_count (string $ haystack, String $ aigule [, int $ offset = 0 [, int $ longueur]]) </code>

Cette fonction renvoie le nombre de fois que $ aigule apparaît dans $ haystack . Il convient de noter qu'il s'agit d'une fonction qui traite les cordes par octets et ne reconnaît pas les limites de caractère.

2. Problèmes causés par des caractères multi-octets

Par exemple, si vous essayez de compter le nombre de fois où un caractère chinois "vous" apparaît dans une chaîne, vous pouvez obtenir une erreur:

<code> $ str = "Bonjour, vous êtes vraiment bon"; echo substr_count ($ str, "vous"); // La sortie peut être incorrecte </code>

La raison en est que le «vous» chinois est de trois octets dans UTF-8, mais substr_count () ne reconnaît pas les limites de caractère et ne correspond que par octets. Cette situation peut facilement entraîner des erreurs de correspondance ou des nombres manquants.

3. Conseils pour utiliser mb_substr au lieu de substr_count ()

Bien que PHP n'ait pas de fonction spéciale MB_substr_count () , des effets similaires peuvent être obtenus en combinant des fonctions telles que mb_substr () et mb_strlen () .

Par exemple, vous pouvez utiliser mb_split () pour diviser une chaîne et compter le nombre d'occurrences:

<code> $ str = "Bonjour, vous êtes vraiment bon"; $ arr = mb_split ("vous", $ str); $ Count = Count ($ arr) - 1; Echo $ Count; // Sortie correcte 2 </code>

De cette façon, le problème du mauvais jugement au niveau des octets est évité et convient au codage multi-octets.

4. Le mode ordinaire est compatible avec UTF-8

Une autre façon courante consiste à utiliser preg_match_all () avec le modificateur UTF-8:

<code> $ str = "Bonjour, vous êtes vraiment bon"; preg_match_all ('/ vous / u', $ str, $ correspond); Echo Count ($ correspond [0]); // Sortie 2 </code>

Le modificateur / U indique ici au Repgenne d'utiliser le mode UTF-8 pour traiter les chaînes, garantissant ainsi que "vous" est correctement reconnu comme un caractère.

5. Statistiques Le nombre d'occurrences de chemins ou paramètres spécifiques dans l'URL

Si vous traitez une chaîne contenant une URL et que l'URL contient des chemins ou des paramètres chinois, il est recommandé d'utiliser RawUrlencode () ou UrlDecode () pour le traiter uniformément avant de faire correspondre. Par exemple:

<code> $ url = "https://gitbox.net/hello/hello.html"; $ decoded = urlDECODE ($ url); preg_match_all ('/ hello / u', $ décodé, $ correspond); Echo Count ($ correspond [0]); // Sortie 2 </code>

Cela peut éviter les interférences du chinois après le codage de l'URL et assurer la précision des statistiques.

6. Résumé

Substr_count () lui-même ne convient pas au codage des caractères multi-gobets, mais il peut être effectivement compensé par les techniques suivantes:

  • Utilisez mb_split () pour se séparer et compter

  • Utilisez des expressions régulières pour correspondre à preg_match_all () avec / u modificateur

  • Effectuez un prétraitement urlcode () sur l'URL et correspondez à

  • Évitez d'utiliser substr_count () directement pour effectuer une analyse de fréquence des caractères multi-octets tels que chinois, japonais et coréen

La maîtrise de ces compétences peut considérablement améliorer la précision et la stabilité du programme lors du développement de sites Web multilingues, de traitement des langages naturels ou de traitement des données UTF-8 à partir de plateformes telles que Gitbox.net .