Utilisation ucwords

Bonjour,

Dans un masque de saisie, j'inscrit des prénoms que je récupère pour remplir ma bd.
A la récupération, je met tout le champs prénom en minuscule :
$prenom = strtolower($prenom);
Puis, je met la première de chaque mot (prénom) en majuscule (car il peut y avoir 2,3,ou 4 prénoms) :
$prenoms = ucwords($prenom);
Le problème, c'est que s'il y a des prénoms composés (jean-pierre), jean prends bioen la majuscule, mais pas pierre, car il y a un trait d'union devant.
Comment mettre une majuscule après chaque trait d'union ?
Merci.

11 réponses

  1. Tu fais une syntaxe qui vérifies le tiret.
    Ensuites tu fais un str_replace du tiret par un espace, tu fais ton ucwords et tu str_replace le espace par tiret.
    0
    1. Oui, mais je peux avoir plusieurs prénoms espacés par un espace, et certains prénoms avec un tiret (marie pauline marie-claire) !
      Je ne peux donc pas remplacer tous les espaces par un tiret ........
      0
      1. Pourquoi plusieurs prénoms séparés par des espaces? Ce serait du genre le prénom principal et les prénoms secondaires?

        Dans ce cas là, pourquoi ne pas les séparer par des virgules au moment de l'insertion et faire le traitement en php de l'autre coté. C'est beaucoup plus simple non?
        0
        1. C'est à dire placer les virgules à la saisie, ou placer les virgules à l'insertion dans la BD ?
          0
          1. A la saisie (quoi que ca aurait aussi un interet dans la bd pour plus tard je penses éventuellement).
            0
        2. Salut,

          Voici un exemple de solution :
          <?php
          
          function getUpperName($string) {
          	$stringLenght = strlen($string);
          
          	// on parcours les caractères de la chaine
          	for ($i = 0; $i < $stringLenght; $i++) {
          		// si le caractère courant est un tiret et qu'il existe un caractère suivant
          		if ($string[$i] == '-' && $i < $stringLenght - 1) {
          			// on transforme en majuscule le caractère suivant
          			$string[$i + 1] = strtoupper($string[$i + 1]);
          		}
          	}
          	
          	return ucwords($string);
          }
          
          echo getUpperName('marie-helene');
          echo '<br />';
          echo getUpperName('jean-pierre henri');
          
          ?>
          


          Bonne journée
          0
          1. Désole Pitet, mais ça ne fonctionne pas ! Ni la 1° partie, ni la 2° n'ont une majuscule .............
            0
            1. Désolé t671 mais ce code fonctionne bien chez moi, et je ne comprend absolument pas pourquoi il ne fonctionne pas pour toi.
              0
              1. Voilà comment je l'ai adapté, mais ça ne fonctionne pas :
                function getUpperName($prenom) {
                	$stringLenght = strlen($prenom);
                
                	// on parcours les caractères de la chaine
                	for ($i = 0; $i < $stringLenght; $i++) {
                		// si le caractère courant est un tiret et qu'il existe un caractère suivant
                		if ($prenom[$i] == '-' && $i < $stringLenght - 1) {
                			// on transforme en majuscule le caractère suivant
                			$prenom[$i + 1] = strtoupper($prenom[$i + 1]);
                		}
                	}
                }
                

                J'ai peut-être oublié qqchose ????
                0
                1. Massacre à la tronconneuse :O
                  0
                  1. Il manque le return dans l'adaptation que tu as faite :

                    return ucwords($prenom);


                    Ça devrait marcher beaucoup mieux avec ceci :)
                    0
                    1. Merci à vous tous .............
                      J'ai une autre solution, plus simple :

                      $prenom = str_replace ('-', '¿ ', $prenom); 
                      $prenom = ucwords ($prenom);//Pour ceux qui à l'origine sont précédés par des '-'
                      $prenom = str_replace ('¿ ', '-', $prenom); 
                      1