Position actuelle: Accueil> Derniers articles> [La fonction StrnCMP est-elle sensible à la casse? Problèmes et solutions pour la sensibilité des caisses STRNCMP dans PHP]

[La fonction StrnCMP est-elle sensible à la casse? Problèmes et solutions pour la sensibilité des caisses STRNCMP dans PHP]

gitbox 2025-08-22

1. Utilisation de base de la fonction strncmp

La syntaxe de base de la fonction strncmp est la suivante:

 <span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
  • $ str1 : la première chaîne.

  • $ str2 : la deuxième chaîne.

  • $ Longueur : le nombre de caractères à comparer.

La fonction StrnCMP commence à partir du début de deux chaînes, et tout au long des caractères est comparée. Il renvoie les valeurs possibles suivantes:

  • 0 : signifie que les caractères de première longueur sont égaux.

  • Supérieur à 0 : signifie que le premier caractère de $ STR1 est supérieur au caractère de première longueur de $ STR2 .

  • Moins de 0 : signifie que les premiers caractères de $ STR1 sont inférieurs aux caractères de première longueur de $ STR2 .

2. Strncmp est-il sensible à la casse?

La fonction StrnCMP est sensible à la casse . Cela signifie que si vous comparez "bonjour" et "bonjour" avec strncmp , la fonction pensera toujours qu'elles ne sont pas égales même si les deux chaînes sont exactement les mêmes, sauf pour les initiales. Voir l'exemple suivant:

 <span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Deux cordes sont les mêmes"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Deux cordes sont différentes"</span></span><span>;
}
</span></span>

La sortie sera:

 <span><span>Deux cordes sont différentes
</span></span>

Bien que "Hello" et "Hello" aient uniquement des différences de contenu, StrnCMP les considérera inégaux car il est sensible à la casse par défaut.

3. Comment résoudre le problème de la sensibilité des cas?

Si nous voulons que StrnCMP soit insensible à la casse lors de la comparaison, nous pouvons utiliser la fonction strncasecmp . StrncasecMP est une version insensible à la casse, et son utilisation est similaire à strncmp :

 <span><span><span class="hljs-title function_ invoke__">strncasecmp</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>

La fonction StrncasecMP ignore les différences de cas lors de la comparaison des caractères de première longueur de deux chaînes. Les exemples sont les suivants:

 <span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strncasecmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Deux cordes sont les mêmes"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Deux cordes sont différentes"</span></span><span>;
}
</span></span>

La sortie sera:

 <span><span>Deux cordes sont les mêmes
</span></span>

Comme indiqué ci-dessus, la fonction StrncasecMP ignore les différences de cas dans "Hello" et "Hello" et les considère comme la même.

4. Résumé

  1. La fonction STRNCMP est sensible à la casse lors de la comparaison des chaînes.

  2. Si vous avez besoin de faire des comparaisons insensibles à des cas , vous pouvez utiliser la fonction StrncasecMP .

Dans le développement réel, nous devons choisir d'utiliser StrnCMP ou StrncasecMP en fonction de spécifiques pour s'assurer que le résultat de la comparaison des chaînes est conforme aux attentes. Il est particulièrement important de comprendre les différences entre ces fonctions lors du traitement de l'entrée des utilisateurs, des données de formulaire ou des résultats de la requête de base de données.