Caractères PHP en majuscules. Convertir les premières lettres en majuscules (majuscules) - PHP

PHP est bon pour sa variété de fonctions en langage natif. Cependant, dans certains cas, il est nécessaire d’ajouter des fonctionnalités manquantes. Ceci est particulièrement visible lorsque vous travaillez avec des fonctions de conversion de chaînes et divers encodages.

Par exemple, ucfirst est une fonction qui convertit le premier caractère d'une chaîne en majuscule. Il semblerait qu'aucun problème ne devrait survenir, mais lorsque vous travaillez avec le cyrillique, une telle conversion ne se produit pas. Cela s'applique également à la fonction ucwords : elle convertit le premier caractère de chaque mot d'une ligne en majuscule.

Il n'y a aucun problème avec les caractères de l'alphabet anglais :

"; //convertit le premier caractère de chaque mot de la ligne en majuscule echo ucwords($str); ?>

Chaîne de test Chaîne de test

Mais il y a des problèmes avec l'alphabet cyrillique :

"; //convertit le premier caractère de chaque mot de la ligne en majuscule echo ucwords($str); ?>

Ligne de test Ligne de test

Les cas sont typiques pour PHP lorsque les fonctions fonctionnent « mal » ou ne fonctionnent pas du tout avec l'alphabet cyrillique. Certaines fonctions avec le préfixe mb résolvent des problèmes avec l'alphabet cyrillique. Par exemple, mb_strtolower - convertit une chaîne en minuscules. Contrairement à strtolower(), le fait qu'un caractère soit une lettre est déterminé en fonction des propriétés du caractère Unicode.

Pour résoudre le problème, définissons une fonction mb_ucfirst(string str [, string encoding]), qui traitera les caractères Unicode.

Pour convertir le premier caractère de chaque mot d'une ligne en majuscule, utilisez simplement mb_convert_case en mode MB_CASE_TITLE.

Convertit les caractères d'une chaîne en minuscules.

Syntaxe:

Chaîne strtolower(chaîne str);

Convertit une chaîne en minuscules. Renvoie le résultat de la traduction.

Il convient de noter que si les paramètres régionaux sont mal configurés, la fonction produira, pour le moins, des résultats étranges lorsque vous travaillerez avec des lettres cyrilliques.

$str = "Bonjour le monde" ; $str = strtoinférieur($str); écho $str; // imprime bonjour tout le monde

strtoupper

Convertit la chaîne spécifiée en majuscule.

Syntaxe:

Chaîne strtoupper(chaîne str);

Convertit la chaîne en majuscule. Renvoie le résultat de la conversion. Cette fonction fonctionne bien avec les lettres anglaises, mais peut être étrange avec les lettres russes.

$str = "Bonjour tout le monde" ; $str = strtoupper($str); écho $str; // affichera BONJOUR LE MONDE

ucpremier

Convertit le premier caractère d'une chaîne en majuscule.

Syntaxe:

Chaîne ucfirst(chaîne str);

Renvoie une chaîne dont le premier caractère est en majuscule.

$str = "bonjour tout le monde" ; $str = ucfirst($str); écho $str; // imprime Bonjour tout le monde

ucwords

Convertit le premier caractère de chaque mot d'une chaîne en majuscule.

Syntaxe:

Chaîne ucwords(string str);

Renvoie une chaîne avec le premier caractère de chaque mot de la chaîne en majuscule.

Un mot fait ici référence à une section de ligne précédée d'un caractère espace : espace, nouvelle ligne, saut de page, retour chariot, tabulation horizontale et verticale.

Les caractères cyrilliques peuvent ne pas être convertis correctement.

$str = "bonjour tout le monde" ; $str = ucfirst($str); écho $str; // imprime Hello World

il y a 11 ans

Notez que mb_strtolower() est très LENT, si vous disposez d'une connexion à une base de données, vous souhaiterez peut-être l'utiliser pour convertir vos chaînes en minuscules. Même les codages latin1/9 (iso-8859-1/15) et autres sont possibles.

Jetez un œil à mon benchmark simple :

$texte = "Lörem ipßüm dölör ßit ämet, cönßectetüer ädipißcing elit. Sed ligülä. Präeßent jüßtö tellüß, grävidä eü, tempüß ä, mättiß nön, örci. m qüiß lörem. venenätiß jüßtö. ßtie. önüllä.";

// mb_strtolower()
$timeMB = microtime(true);

Pour($i = 0 ; $i< 30000 ; $i ++)
$inférieur = mb_strtolower("$text/no-cache-$i");

$timeMB = microtime(true) - $timeMB ;

// MySQL inférieur()
$timeSQL = microtime(true);

Mysql_query("définir les noms latin1");
pour($i = 0 ; $i< 30000 ; $i ++) {
$r = mysql_fetch_row(mysql_query("select lower(" $text /no-cache- $i ")" ));
$inférieur = $r [ 0 ];
}

$timeSQL = microtime(true) - $timeSQL ;

écho "mb: " . sprintf ("%.5f" , $timeMB ). "seconde.
" ;
écho "sql: " . sprintf ("%.5f" , $timeSQL ). "seconde.
" ;

// Résultat sur mon carnet :
// Mo : 11,50642 secondes.
// sql : 5,44143 secondes.

?>

Il y a 7 ans

Veuillez noter que lors de l'utilisation avec UTF-8, mb_strtolower ne convertira que les caractères majuscules en minuscules marqués par la propriété Unicode "Lettre majuscule" ("Lu"). Cependant, il existe également des lettres telles que « Lettres numériques » (propriété Unicode « Nl ») qui ont également des variantes minuscules et majuscules. Ces caractères ne seront pas convertis avec mb_strtolower !

Exemple:
Les lettres romaines Ⅰ, Ⅱ, Ⅲ, ..., Ⅿ (points de code UTF-8 8544 à 8559) existent également dans leurs variantes minuscules respectives ⅰ, ⅱ, ⅲ, ..., ⅿ (points de code UTF-8 8560 à 8575) et devraient, à mon avis, être également convertis par mb_strtolower, mais ce n'est pas le cas !

Les grandes sociétés Internet (comme Google) associent les deux variantes de manière sémantiquement égale (puisque les représentations ne diffèrent que par cas).

Comme je ne trouvais aucune solution appropriée sur Internet pour mapper toutes les chaînes UTF8 à leur homologue minuscule en PHP, je propose la fonction étendue mb_strtolower codée en dur suivante pour les chaînes UTF-8 :

La fonction enveloppe la fonction existante mb_strtolower() et remplace en outre les caractères UTF8 majuscules pour lesquels il existe une représentation en minuscules. Comme il n'existe pas de table de caractères Unicode majuscules et minuscules sur Internet, j'ai vérifié le premier million de caractères UTF8 par rapport à la recherche Google et à -KeywordTool et j'ai identifié les 78 caractères suivants comme des caractères majuscules, et non étant remplacé par mb_strtolower, mais ayant un homologue minuscule UTF8.

//les nombres dans les commentaires en ligne affichent les caractères" Points de code Unicode (CP).
fonction strtolower_utf8_extended ($utf8_string)
{
$additional_replacements = tableau
("Dž" => "dž" // 453 -> 454
, "Lj" => "lj" // 456 -> 457
, "Nj" => "nj" // 459 -> 460
, "Dz" => "dz" // 498 -> 499
, "Ϸ" => "ϸ" // 1015 -> 1016
, "Ϲ" => "ϲ" // 1017 -> 1010
, "Ϻ" => "ϻ" // 1018 -> 1019
, "ᾈ" => "ᾀ" // 8072 -> 8064
, "ᾉ" => "ᾁ" // 8073 -> 8065
, "ᾊ" => "ᾂ" // 8074 -> 8066
, "ᾋ" => "ᾃ" // 8075 -> 8067
, "ᾌ" => "ᾄ" // 8076 -> 8068
, "ᾍ" => "ᾅ" // 8077 -> 8069
, "ᾎ" => "ᾆ" // 8078 -> 8070
, "ᾏ" => "ᾇ" // 8079 -> 8071
, "ᾘ" => "ᾐ" // 8088 -> 8080
, "ᾙ" => "ᾑ" // 8089 -> 8081
, "ᾚ" => "ᾒ" // 8090 -> 8082
, "ᾛ" => "ᾓ" // 8091 -> 8083
, "ᾜ" => "ᾔ" // 8092 -> 8084
, "ᾝ" => "ᾕ" // 8093 -> 8085
, "ᾞ" => "ᾖ" // 8094 -> 8086
, "ᾟ" => "ᾗ" // 8095 -> 8087
, "ᾨ" => "ᾠ" // 8104 -> 8096
, "ᾩ" => "ᾡ" // 8105 -> 8097
, "ᾪ" => "ᾢ" // 8106 -> 8098
, "ᾫ" => "ᾣ" // 8107 -> 8099
, "ᾬ" => "ᾤ" // 8108 -> 8100
, "ᾭ" => "ᾥ" // 8109 -> 8101
, "ᾮ" => "ᾦ" // 8110 -> 8102
, "ᾯ" => "ᾧ" // 8111 -> 8103
, "ᾼ" => "ᾳ" // 8124 -> 8115
, "ῌ" => "ῃ" // 8140 -> 8131
, "ῼ" => "ῳ" // 8188 -> 8179
, "Ⅰ" => "ⅰ" // 8544 -> 8560
, "Ⅱ" => "ⅱ" // 8545 -> 8561
, "Ⅲ" => "ⅲ" // 8546 -> 8562
, "Ⅳ" => "ⅳ" // 8547 -> 8563
, "Ⅴ" => "ⅴ" // 8548 -> 8564
, "Ⅵ" => "ⅵ" // 8549 -> 8565
, "Ⅶ" => "ⅶ" // 8550 -> 8566
, "Ⅷ" => "ⅷ" // 8551 -> 8567
, "Ⅸ" => "ⅸ" // 8552 -> 8568
, "Ⅹ" => "ⅹ" // 8553 -> 8569
, "Ⅺ" => "ⅺ" // 8554 -> 8570
, "Ⅻ" => "ⅻ" // 8555 -> 8571
, "Ⅼ" => "ⅼ" // 8556 -> 8572
, "Ⅽ" => "ⅽ" // 8557 -> 8573
, "Ⅾ" => "ⅾ" // 8558 -> 8574
, "Ⅿ" => "ⅿ" // 8559 -> 8575
, "Ⓐ" => "ⓐ" // 9398 -> 9424
, "Ⓑ" => "ⓑ" // 9399 -> 9425
, "Ⓒ" => "ⓒ" // 9400 -> 9426
, "Ⓓ" => "ⓓ" // 9401 -> 9427
, "Ⓔ" => "ⓔ" // 9402 -> 9428
, "Ⓕ" => "ⓕ" // 9403 -> 9429
, "Ⓖ" => "ⓖ" // 9404 -> 9430
, "Ⓗ" => "ⓗ" // 9405 -> 9431
, "Ⓘ" => "ⓘ" // 9406 -> 9432
, "Ⓙ" => "ⓙ" // 9407 -> 9433
, "Ⓚ" => "ⓚ" // 9408 -> 9434
, "Ⓛ" => "ⓛ" // 9409 -> 9435
, "Ⓜ" => "ⓜ" // 9410 -> 9436
, "Ⓝ" => "ⓝ" // 9411 -> 9437
, "Ⓞ" => "ⓞ" // 9412 -> 9438
, "Ⓟ" => "ⓟ" // 9413 -> 9439
, "Ⓠ" => "ⓠ" // 9414 -> 9440
, "Ⓡ" => "ⓡ" // 9415 -> 9441
, "Ⓢ" => "ⓢ" // 9416 -> 9442
, "Ⓣ" => "ⓣ" // 9417 -> 9443
, "Ⓤ" => "ⓤ" // 9418 -> 9444
, "Ⓥ" => "ⓥ" // 9419 -> 9445
, "Ⓦ" => "ⓦ" // 9420 -> 9446
, "Ⓧ" => "ⓧ" // 9421 -> 9447
, "Ⓨ" => "ⓨ" // 9422 -> 9448
, "Ⓩ" => "ⓩ" // 9423 -> 9449
, "𐐦" => "𐑎" // 66598 -> 66638
, "𐐧" => "𐑏" // 66599 -> 66639
);

$utf8_string = mb_strtolower($utf8_string, "UTF-8");

$utf8_string = strtr ($utf8_string, $additional_replacements);

Renvoie $utf8_string ;
) //strtolower_utf8_extended()

Fonctions de changement de cas

strtoinférieur

Convertit les caractères d'une chaîne en minuscules.

Syntaxe:

chaîne strtolower(chaîne str);

Convertit une chaîne en minuscules. Renvoie le résultat de la traduction.

Il convient de noter que si les paramètres régionaux sont mal configurés, la fonction produira, pour le moins, des résultats étranges lorsque vous travaillerez avec des lettres cyrilliques.

$str = "Bonjour le monde" ;

$str = strtoinférieur($str);

// imprime bonjour tout le monde

strtoupper

Convertit la chaîne spécifiée en majuscule.

Syntaxe:

chaîne strtoupper(chaîne str);

Convertit la chaîne en majuscule. Renvoie le résultat de la conversion. Cette fonction fonctionne bien avec les lettres anglaises, mais peut être étrange avec les lettres russes.

$str = "Bonjour tout le monde" ;

$str = strtoupper($str);

// affichera BONJOUR LE MONDE

Convertit le premier caractère d'une chaîne en majuscule.

Syntaxe:

chaîne ucfirst(chaîne str);

Renvoie une chaîne dont le premier caractère est en majuscule.

$str = "bonjour tout le monde" ;

$str = ucfirst($str);

// imprime Bonjour tout le monde

Convertit le premier caractère de chaque mot d'une chaîne en majuscule.

Syntaxe:

chaîne ucwords(chaîne str);

Renvoie une chaîne avec le premier caractère de chaque mot de la chaîne en majuscule.

Un mot fait ici référence à une section de ligne précédée d'un caractère espace : espace, nouvelle ligne, saut de page, retour chariot, tabulation horizontale et verticale.

Les caractères cyrilliques peuvent ne pas être convertis correctement.

$str = "bonjour tout le monde" ;

$str = ucfirst($str);

// imprime Hello World

Extrait du livre Encyclopédie du développeur de modules du noyau Linux par Pomerantz Ori

Extrait du livre Facteurs humains dans la programmation auteur Konstantin Larry L.

54 Agents de changement Un poisson, faisant le bon mouvement au bon moment, peut changer le cours d'un banc entier. Dans une équipe de développement de logiciels, le succès de l'introduction d'un nouvel outil ou d'une méthode améliorée de contrôle de version dépend souvent de

Extrait du livre Utiliser STL efficacement par Meyers Scott

Astuce 35 : Implémentez de simples comparaisons de chaînes insensibles à la casse en utilisant mismatch ou lexicographical_compare L'une des questions souvent posées par les débutants en STL est « Comment la STL compare-t-elle les chaînes insensibles à la casse ? » La simplicité de cette question est trompeuse. Comparaisons

Extrait du livre Fondamentaux de la programmation orientée objet de Meyer Bertrand

Comparaison de chaînes insensibles à la casse Matt OsternSi vous avez déjà écrit des programmes qui utilisent des chaînes (et qui ne l'a pas fait ?), vous avez probablement rencontré une situation courante : deux chaînes qui ne diffèrent que par la casse.

Extrait du livre Architecture TCP/IP, protocoles, implémentation (y compris IP version 6 et IP Security) par Faith Sydney M

Extrait du livre Technologie XSLT auteur Valikov Alexeï Nikolaïevitch

Changement et cohérence Le développement de logiciels, comme mentionné, a beaucoup à voir avec la répétition. Pour comprendre la difficulté technique de la réutilisation, il faut comprendre la nature de la répétition. Même si les programmeurs répètent généralement les mêmes idées de temps en temps

Extrait du livre Développement d'applications dans l'environnement Linux. Deuxième édition auteur JohnsonMichael K.

11.8.2 Déplacements et modifications Que se passe-t-il si l'utilisateur déplace l'ordinateur vers un autre emplacement, en le connectant à un autre réseau ou sous-réseau ? Lors du démarrage, un ordinateur utilisant DHCP modifiera automatiquement son adresse IP et son masque de sous-réseau, et si nécessaire -

Extrait du livre C++. Recueil de recettes auteur Christopher Diggins

10.22.3 Modifications du DNS Un nouveau type d'enregistrement de ressource, AAAA, mappe les noms de domaine aux adresses IP version 6. Un exemple d'un tel enregistrement : MICKEY IN AAAA 4321:0:1:2:3:4:567:89ABRecherche inversée. doit également être fourni. Pour résoudre les adresses en noms pour IPv6, vous devrez ajouter de nouveaux domaines. Recherche inversée

Extrait du livre Linux et UNIX : programmation shell. Guide du développeur. par Tainsley David

Extrait du livre Ordinateur de bureau pour les femmes auteur Pasternak Evgenia

Changements dans XPath 2.0 La version en développement du langage XPath, en raison de l'intégration avec XQuery, va évidemment subir des changements majeurs. La nouvelle spécification est déjà divisée en deux documents : un document décrivant le modèle de données et un document décrivant les fonctions et opérateurs. Donc sur

Extrait du livre HTML, XHTML et CSS 100% auteur Kvint Igor

11.7.2. Modifications du code Une fois que parseCommand() a correctement reflété les structures de données, exécuter les commandes dans le bon ordre est assez facile avec suffisamment d'attention aux détails. Tout d'abord, nous ajoutons une boucle à parseCommand() pour lancer les processus enfants,

Extrait du livre de l'auteur

4.13. Exécution d'un problème de comparaison de chaînes insensible à la casse Vous disposez de deux chaînes et souhaitez déterminer si elles sont égales, quelle que soit la casse de leurs caractères. Par exemple, « cat » n'est pas égal à « dog », mais « Cat » doit être égal à « cat », « CAT » ou « caT ». Solution : Comparez les chaînes en utilisant la norme.

Extrait du livre de l'auteur

4.14. Exécution d'une recherche de chaîne insensible à la casse Problème Vous souhaitez rechercher une sous-chaîne dans une chaîne qui ne respecte pas les différences de casse Solution Utilisez les algorithmes de transformation et de recherche standard définis dans . , ainsi que ses propres fonctions de comparaison de caractères, similaires à

Extrait du livre de l'auteur

8.1.8. Ignorer la casse Par défaut, la commande grep est sensible à la casse. Pour effectuer une recherche qui ne respecte pas la casse, utilisez l'option -i. Dans le fichier data.f, le symbole du mois Sept apparaît en majuscules et en minuscules. Donc pour

Extrait du livre de l'auteur

Modifications S'il y a de nombreuses modifications dans le document, il est pratique d'utiliser ce groupe de boutons. Par exemple, vous voyez une correction et vous l'acceptez. Placez le curseur dedans et cliquez sur le bouton Accepter. La mise en évidence de la correction disparaît, et elle s'intègre organiquement dans votre texte.

Extrait du livre de l'auteur

L'objectif des noms de balises et d'attributs est sensible à la casse. Dans les documents HTML, les noms de balises et d'attributs ne sont pas sensibles à la casse, de sorte que, par exemple,

,
ou
signifie la même balise de table. Cependant, en XHTML, ce sont des balises différentes. Il en va de même pour les noms

En PHP, les noms de variables et de constantes sont sensibles à la casse, mais pas les noms de fonctions.

Pour autant que je sache, PHP est le seul langage qui fait cela. Toutes les autres langues que j'ai utilisées sont soit entièrement sensibles à la casse, soit totalement insensibles à la casse.

Pourquoi PHP partiellement fait référence à sensible?

Veuillez noter que je ne demande pas lequel les noms sont sensibles à la casse, mais Pourquoi .

Sensible aux majuscules et minuscules

  • variables
  • constantes
  • clés du tableau
  • propriétés de classe
  • constantes de classe

Insensible à la casse(à la fois défini par l'utilisateur et PHP)

  • les fonctions
  • constructeurs de classe
  • méthodes de classe
  • mots-clés et constructions (if, else, null, foreach, echo, etc.)

les bases

Les variables en PHP sont représentées par un signe dollar suivi du nom de la variable. Le nom de la variable est sensible à la casse.

Les noms de variables suivent les mêmes règles que les autres étiquettes en PHP. Un nom de variable valide commence par une lettre ou un trait de soulignement, suivi d'un nombre quelconque de lettres, de chiffres ou de traits de soulignement. En tant qu'expression régulière, il s'exprime comme suit : "*"

  1. Guide de l'utilisateur pour les utilisateurs
  2. Pourquoi les fonctions et méthodes en PHP sont-elles insensibles à la casse ?
  3. Les fonctions PHP sont-elles sensibles à la casse ?
  4. Les mots-clés PHP sont-ils sensibles à la casse ?
  5. Les noms de fonctions PHP sont-ils sensibles à la casse ou non ?
  6. Source de sensibilité PHP

Affaire délicate

variables, constantes, clés de tableau, propriétés de classe, constantes de classe

Insensible à la casse

fonctions, constructeurs de classe, méthodes de classe, mots-clés et constructions (if, else, null, foreach, echo, etc.),

Pour les noms de fichiers :

Notez que la sensibilité à la casse dépend également de votre environnement.

Lorsque vous développez quelque chose sur votre WAMP ou XAMPP, la casse ne sera pas respectée. Lorsque vous passerez à un serveur Linux, une erreur sera générée.

Pourquoi PHP est-il partiellement sensible ?

Je ne peux que supposer que cela est dû à des versions très anciennes, peut-être PHP/FI 2.0. Le manuel indique clairement :

Veuillez noter que les noms de fonctions PHP/FI ne sont pas sensibles à la casse.

La plupart des données utilisateur, telles que les paramètres GET et POST, ont toujours été enregistrées en tant que variables globales. Traiter ces questions comme étant insensibles à la casse aurait probablement causé des problèmes, ce qui explique probablement pourquoi toutes les variables ont été traitées comme étant sensibles à la casse.

D'après ce que je peux dire, ce sont les seuls types d'identifiants dans PHP/FI 2.0. Tous les autres ont été introduits plus tard, imitant apparemment les noms de fonctions insensibles à la casse.

Les constantes, qui sont spéciales, n'ont été introduites qu'avec PHP 4 (le manuel de PHP 3 mentionne des "constantes", mais de nos jours elles sont appelées "littéraux"). Pour une raison mystérieuse (peut-être qu'aucun consensus n'a pu être trouvé), la décision a été prise d'autoriser les identifiants persistants de definition() d à être soit sensibles à la casse, soit insensibles au rejet du développeur. Il est intéressant de noter que même si définir() utilise par défaut des constantes sensibles à la casse, la copie C correspondante (REGISTER_*_CONSTANT) n'est pas sensible à la casse par défaut.



2024 wisemotors.ru. Comment ça fonctionne. Fer. Exploitation minière. Crypto-monnaie.