Utilisation ucwords

t671 Messages postés 1632 Statut Membre -  
 t671 -
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

t671
 
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
djflexlive Messages postés 577 Statut Membre 95
 
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
t671 Messages postés 1632 Statut Membre 11
 
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
djflexlive Messages postés 577 Statut Membre 95
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t671
 
C'est à dire placer les virgules à la saisie, ou placer les virgules à l'insertion dans la BD ?
0
djflexlive Messages postés 577 Statut Membre 95
 
A la saisie (quoi que ca aurait aussi un interet dans la bd pour plus tard je penses éventuellement).
0
Pitet Messages postés 2845 Statut Membre 527
 
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
t671
 
Désole Pitet, mais ça ne fonctionne pas ! Ni la 1° partie, ni la 2° n'ont une majuscule .............
0
Pitet Messages postés 2845 Statut Membre 527
 
Désolé t671 mais ce code fonctionne bien chez moi, et je ne comprend absolument pas pourquoi il ne fonctionne pas pour toi.
0
t671
 
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
djflexlive Messages postés 577 Statut Membre 95
 
Massacre à la tronconneuse :O
0
Pitet Messages postés 2845 Statut Membre 527
 
Il manque le return dans l'adaptation que tu as faite :

return ucwords($prenom);


Ça devrait marcher beaucoup mieux avec ceci :)
0