Bonjour à tous,

Cela va faire plusieurs heures que je galère pour un truc surement très bête...
Du coup j'ai développé une usine à gaz et je viens vers vous car cela ne fonctionne pas complètement et peut-être qu'il y a un moyen beaucoup plus simple.

J'essaie de développé une fonction qui prends deux arguments : "un mode" et "une chaîne de caractères".

Il existe deux mode :
  • MAJ : qui convertie toute la chaîne de caractères en majuscule en conservant toutes les accentuations
  • MIN : qui convertie toute la chaîne de caractère en minuscule sauf le premier caractère qui doit-être en majuscule, en conservant toutes les accentuations


J'ai réussi à faire ma fonction qui marche dans presque tous les cas, sauf lorsque j'utilise le mode MIN avec une chaîne qui commence avec un caractère minuscule accentué.

Voici mon code en mode débug (avec plein "echo" et différents tests) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Fonction permettant de convertir une chaine en MAJ ou en MIN ////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
function convertir($mode, $texte)
{
//abcdefghijklmnopqrstuvwxyzàáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž --> lettres minuscules accentuées et non accentuées
//ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ --> lettres majuscules accentuées et non accentuées
 
	/*Déclaration des variables */
	$new_chaine = null;
 
	/* tableau de conversion minuscule en majuscule */
	$trans1 = array("a" => "A", "b" => "B", "c" => "C", "d" => "D", "e" => "E", "f" => "F", "g" => "G", "h" => "H", "i" => "I", "j" => "J", "k" => "K", "l" => "L", "m" => "M", "n" => "N", "o" => "O", "p" => "P", "q" => "Q", "r" => "R", "s" => "S", "t" => "T", "u" => "U", "v" => "V", "w" => "W", "x" => "X", "y" => "Y", "z" => "Z", "à" => "À", "á" => "Á", "â" => "Â", "ã" => "Ã", "ä" => "Ä", "å" => "Å", "æ" => "Æ", "ç" => "Ç", "ð" => "Ð", "è" => "È", "é" => "É", "ê" => "Ê", "ë" => "Ë", "ì" => "Ì", "í" => "Í", "î" => "Î", "ï" => "Ï", "ñ" => "Ñ", "ò" => "Ò", "ó" => "Ó", "ô" => "Ô", "õ" => "Õ", "ö" => "Ö", "ø" => "Ø", "œ" => "Œ", "ß" => "ß", "š" => "Š", "þ" => "Þ", "ù" => "Ù", "ú" => "Ú", "û" => "Û", "ü" => "Ü", "ý" => "Ý", "ÿ" => "Ÿ", "ž" => "Ž");
 
	/* tableau de conversion majuscule en minuscule */
	$trans2 = array("A" => "a", "B" => "b", "C" => "c", "D" => "d", "E" => "e", "F" => "f", "G" => "g", "H" => "h", "I" => "i", "J" => "j", "K" => "k", "L" => "l", "M" => "m", "N" => "n", "O" => "o", "P" => "p", "Q" => "q", "R" => "r", "S" => "s", "T" => "t", "U" => "u", "V" => "v", "W" => "w", "X" => "x", "Y" => "y", "Z" => "z", "À" => "à", "Á" => "á", "Â" => "â", "Ã" => "ã", "Ä" => "ä", "Å" => "å", "Æ" => "æ", "Ç" => "ç", "Ð" => "ð", "È" => "è", "É" => "é", "Ê" => "ê", "Ë" => "ë", "Ì" => "ì", "Í" => "í", "Î" => "î", "Ï" => "ï", "Ñ" => "ñ", "Ò" => "ò", "Ó" => "ó", "Ô" => "ô", "Õ" => "õ", "Ö" => "ö", "Ø" => "ø", "Œ" => "œ", "ß" => "ß", "Š" => "š", "Þ" => "þ", "Ù" => "ù", "Ú" => "ú", "Û" => "û", "Ü" => "ü", "Ý" => "ý", "Ÿ" => "ÿ", "Ž" => "ž");
 
	echo 'mode='.$mode.'<br>';
 
	if($mode == 'MAJ')//fonction qui transforme toute la chaîne en majuscule
		{
			echo "début boucle MAJ<br>";
			echo 'chaine : '.$texte.'<br>';
			echo 'avant1:'.$texte[0].'<br>';
			$new_chaine = strtr($texte, $trans1);
			echo 'après:'.$new_chaine[0].'<br>';
			echo 'dans boucle MAJ : '.$new_chaine.'<br>';
		}
 
	if($mode == 'MIN')//fonction qui transforme la chaîne en minuscule et la première lettre en majuscule
		{
			echo "début boucle MIN<br>";
			echo 'chaine : '.$texte.'<br>';
			echo 'avant1:'.$texte[0].'<br>';
			$new_chaine = strtr($texte, $trans2);
			echo 'avant2:'.$new_chaine[0].'<br>';
			$new_chaine[0] = strtr($new_chaine[0], $trans1);
			echo 'après:'.$new_chaine[0].'<br>';
			echo 'dans boucle MIN : '.$new_chaine.'<br>';
		}
	echo "<br>";
	return $new_chaine;
}
 
echo "####################################################<br>";
echo "#################### 1er TEST ##########################<br>";
echo "####################################################<br>";
$chaine1 = "ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ";
$majuscule1 = convertir("MAJ",$chaine1);
$minuscule1 = convertir("MIN",$chaine1);
echo '1ère chaine : '.$chaine1.'<br>';
echo 'en majuscule : '.$majuscule1.'<br>';
echo 'en minuscule : '.$minuscule1.'<br>';
echo "####################################################<br><br><br><br>";
 
echo "####################################################<br>";
echo "################## 2ème TEST ##########################<br>";
echo "####################################################<br>";
$chaine2 = "àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž";
$majuscule2 = convertir("MAJ",$chaine2);
$minuscule2 = convertir("MIN",$chaine2);
echo '2ème chaine : '.$chaine2.'<br>';
echo 'en majuscule : '.$majuscule2.'<br>';
echo 'en minuscule : '.$minuscule2.'<br>';
echo "####################################################<br><br><br><br>";
 
echo "####################################################<br>";
echo "################## 3ème TEST ##########################<br>";
echo "####################################################<br>";
$chaine3 = "minuscule";
$majuscule3 = convertir("MAJ",$chaine3);
$minuscule3 = convertir("MIN",$chaine3);
echo '3ème chaine : '.$chaine3.'<br>';
echo 'en majuscule : '.$majuscule3.'<br>';
echo 'en minuscule : '.$minuscule3.'<br>';
echo "####################################################<br><br><br><br>";
 
echo "####################################################<br>";
echo "################## 4ème TEST ##########################<br>";
echo "####################################################<br>";
$chaine4 = "Majuscule";
$majuscule4 = convertir("MAJ",$chaine4);
$minuscule4 = convertir("MIN",$chaine4);
echo '4ème chaine : '.$chaine4.'<br>';
echo 'en majuscule : '.$majuscule4.'<br>';
echo 'en minuscule : '.$minuscule4.'<br>';
echo "####################################################<br><br><br><br>";
 
echo "####################################################<br>";
echo "################## 5ème TEST ##########################<br>";
echo "####################################################<br>";
$chaine5 = "ÊMÂJUSCULé@MïNûSCÜLé";
$majuscule5 = convertir("MAJ",$chaine5);
$minuscule5 = convertir("MIN",$chaine5);
echo '5ème chaine : '.$chaine5.'<br>';
echo 'en majuscule : '.$majuscule5.'<br>';
echo 'en minuscule : '.$minuscule5.'<br>';
echo "####################################################<br><br><br><br>";
 
echo "####################################################<br>";
echo "################## 6ème TEST ##########################<br>";
echo "####################################################<br>";
$chaine6 = "MÂJUSCULé@MïNûSCÜLé";
$majuscule6 = convertir("MAJ",$chaine6);
$minuscule6 = convertir("MIN",$chaine6);
echo '6ème chaine : '.$chaine6.'<br>';
echo 'en majuscule : '.$majuscule6.'<br>';
echo 'en minuscule : '.$minuscule6.'<br>';
echo "####################################################<br><br><br><br>";
?>



Voici ce qu'affiche à l'écran ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
####################################################
#################### 1er TEST ##########################
####################################################
mode=MAJ
début boucle MAJ
chaine : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
avant1:�
après:�
dans boucle MAJ : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
 
mode=MIN
début boucle MIN
chaine : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
avant1:�
avant2:�
après:�
dans boucle MIN : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
 
1ère chaine : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
en majuscule : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
en minuscule : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
####################################################
 
 
 
####################################################
################## 2ème TEST ##########################
####################################################
mode=MAJ
début boucle MAJ
chaine : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
avant1:�
après:�
dans boucle MAJ : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
 
mode=MIN
début boucle MIN
chaine : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
avant1:�
avant2:�
après:�
dans boucle MIN : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
 
2ème chaine : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
en majuscule : ÀÁÂÃÄÅÆÇÐÈÉÊËÌÍÎÏÑÒÓÔÕÖØŒßŠÞÙÚÛÜÝŸŽ
en minuscule : àáâãäåæçðèéêëìíîïñòóôõöøœßšþùúûüýÿž
####################################################
 
 
 
####################################################
################## 3ème TEST ##########################
####################################################
mode=MAJ
début boucle MAJ
chaine : minuscule
avant1:m
après:M
dans boucle MAJ : MINUSCULE
 
mode=MIN
début boucle MIN
chaine : minuscule
avant1:m
avant2:m
après:M
dans boucle MIN : Minuscule
 
3ème chaine : minuscule
en majuscule : MINUSCULE
en minuscule : Minuscule
####################################################
 
 
 
####################################################
################## 4ème TEST ##########################
####################################################
mode=MAJ
début boucle MAJ
chaine : Majuscule
avant1:M
après:M
dans boucle MAJ : MAJUSCULE
 
mode=MIN
début boucle MIN
chaine : Majuscule
avant1:M
avant2:m
après:M
dans boucle MIN : Majuscule
 
4ème chaine : Majuscule
en majuscule : MAJUSCULE
en minuscule : Majuscule
####################################################
 
 
 
####################################################
################## 5ème TEST ##########################
####################################################
mode=MAJ
début boucle MAJ
chaine : ÊMÂJUSCULé@MïNûSCÜLé
avant1:�
après:�
dans boucle MAJ : ÊMÂJUSCULÉ@MÏNÛSCÜLÉ
 
mode=MIN
début boucle MIN
chaine : ÊMÂJUSCULé@MïNûSCÜLé
avant1:�
avant2:�
après:�
dans boucle MIN : êmâjusculé@mïnûscülé
 
5ème chaine : ÊMÂJUSCULé@MïNûSCÜLé
en majuscule : ÊMÂJUSCULÉ@MÏNÛSCÜLÉ
en minuscule : êmâjusculé@mïnûscülé
####################################################
 
 
 
####################################################
################## 6ème TEST ##########################
####################################################
mode=MAJ
début boucle MAJ
chaine : MÂJUSCULé@MïNûSCÜLé
avant1:M
après:M
dans boucle MAJ : MÂJUSCULÉ@MÏNÛSCÜLÉ
 
mode=MIN
début boucle MIN
chaine : MÂJUSCULé@MïNûSCÜLé
avant1:M
avant2:m
après:M
dans boucle MIN : Mâjusculé@mïnûscülé
 
6ème chaine : MÂJUSCULé@MïNûSCÜLé
en majuscule : MÂJUSCULÉ@MÏNÛSCÜLÉ
en minuscule : Mâjusculé@mïnûscülé
####################################################
Pour info à l'écran, à la place de "&#65533" j'ai un petit losange avec un ? dedans.

Merci pour toute l'aide que vous pourrez m'apporter.

misterg94