Dans PHP, CTYPE_UPPER () est une fonction utilisée pour détecter si tous les caractères d'une chaîne sont des lettres majuscules. Il est souvent utilisé pour la vérification des caractères anglais, mais lorsqu'il s'agit de caractères contenant d'autres langues (en particulier les jeux de caractères non latins), cette fonction peut ne pas être aussi générique qu'il y paraît à la surface. Cet article explorera en profondeur la portée de l'application de CTYPE_UPPER () , les scénarios d'utilisation typiques et ses limites de traitement multilingue.
L'utilisation de base de ctype_upper () est très simple. Il prend un paramètre de chaîne et renvoie une valeur booléenne indiquant si la chaîne ne contient que des lettres majuscules.
<code> $ test1 = 'bonjour'; $ test2 = 'bonjour'; var_dump (ctype_upper ($ test1)); // sortie: bool (true)
var_dump (ctype_upper ($ test2)); // sortie: bool (false)
</code>
Le code ci-dessus montre clairement que tant qu'il y a un caractère qui n'est pas une lettre d'anglais capital, le résultat de retour est faux .
CTYPE_UPPER () est mis en œuvre sur la base de CTYPE.H de la bibliothèque standard C, et ses critères de jugement sont limités aux majuscules dans la gamme ASCII (c'est-à-dire AZ, correspondant à ASCII 65 à 90). Cela signifie que la fonction ne porte pas de jugements corrects sur les caractères UTF-8 ou les caractères de capital dans les ensembles de caractères non ASCII.
Par exemple:
<code> $ test3 = 'école'; // en majuscule en French $ test4 = 'σχολειο'; // majuscule σχολειο en grec var_dump (ctype_upper ($ test3)); // sortie: bool (false)
var_dump (ctype_upper ($ test4)); // sortie: bool (false)
</code>
Bien que visuellement, ce sont tous des caractères de capital, CTYPE_UPPER () renvoie faux parce que ces caractères ne sont pas dans la gamme ASCII.
Si vous travaillez sur un formulaire d'enregistrement multilingue qui prend en charge multilingue et que vous souhaitez vérifier que le nom d'utilisateur est une entrée de capital complet, en utilisant CTYPE_UPPER () peut manquer de nombreuses entrées légitimes.
Par exemple, un utilisateur français entre en émilie et vous souhaitez l'accepter comme un format de capital juridique, mais Ctype_upper () le rejetera. Dans ce cas, des fonctions de traitement de chaîne plus avancées sont nécessaires, telles que les fonctions de la série MB_ * de PHP.
Nous pouvons utiliser mb_strtoupper () pour convertir la chaîne en formulaire majuscule et la comparer avec la chaîne d'origine pour déterminer si elle est "toute capitale":
<code> $ input = 'émilie'; $ isUpper = $ input === MB_strtoupper ($ entrée, 'utf-8'); var_dump ($ isUpper); // sortie: bool (true)
</code>
Cela prend non seulement ASCII, mais soutient également les personnages de capital dans diverses langues telles que le français, le grec et le russe.
Pour les applications qui nécessitent un traitement transversal, voici quelques suggestions:
Utilisez toujours la famille de fonctions MB_ * pour traiter les chaînes multi -ytet;
Lorsque vous effectuez une détection de type de caractère, clarifiez votre jeu de caractères (comme UTF-8);
Évitez d'utiliser les fonctions de la série CTYPE_ * pour le traitement des caractères non anglais;
Pour les règles de vérification des entrées, essayez de fournir des stratégies de perception du langage pour éviter une erreur de jugement.
CTYPE_UPPER () est une fonction très efficace lorsqu'il s'agit de caractères anglais ASCII, mais il a des limites importantes lorsqu'il s'agit de caractères non anglais ou non ASCII. Si votre application est destinée aux utilisateurs multilingues ou implique des caractères Unicode, il est recommandé d'utiliser la série de fonctions MB_ * pour implémenter la vérification des caractères pour assurer la compatibilité et la précision.