Transformer $var = "Fougères" en $var = "FOUGERES" ??? [PHP] - Programmation
Marsh Posté le 25-07-2001 à 11:23:37
function oterAccents($chaine) {
return( strtr( $chaine,
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) );
}
et ensuite tu passes un strToUpper
Marsh Posté le 25-07-2001 à 11:28:29
Aie !
J'ai tout comme l'impression que tu va devoir te taper la conversion pour : "âàäéèêëîïôöùûyÿç"
Mais les spécialistes des RegEx pourront surement t'aider !
Marsh Posté le 25-07-2001 à 11:30:06
Ben, maverick2001, je dis bravo !
J'y pense jamais, à cette fonction strtr
Marsh Posté le 25-07-2001 à 12:50:05
un petit détail, en typographie, on met les accents sur les majuscules.
La raison pour laquelle on en mettait pas jusqu'à présent c'était à cause des machines à écrire (ça aurait fait trop de touches) alors SVP, laissez ces pauvres accents tranquilles
Marsh Posté le 25-07-2001 à 12:54:11
mais soit dit en passant, elle est sympa cette fonction strtr, connaissait pas
Marsh Posté le 25-07-2001 à 15:18:45
duch a écrit a écrit : un petit détail, en typographie, on met les accents sur les majuscules. La raison pour laquelle on en mettait pas jusqu'à présent c'était à cause des machines à écrire (ça aurait fait trop de touches) alors SVP, laissez ces pauvres accents tranquilles |
tout à fait d'accord, mais quand on fait par ex une recherche sur un nom en general on vire accents, apostrophes, etc... et tout en majuscule (en interne uniquement) pour que l'utilisateur ne doive pas rechercher avec et sans accents, maj et min, etc...
sinon pour la belle liste d'accents il en manque : ý ÿ (le premier est utilisé en turc et le second est parfois utilisé en néerlandais à la place de ij)
Marsh Posté le 25-07-2001 à 20:35:19
J'ai jms dit que la liste des accents était exhaustive... A vous de la compléter selon vos besoin
A mon avis, strstr est moins lourde qu'une regex, dc + rapide... Tt dépend de ce qu'on veut en faire
Marsh Posté le 25-07-2001 à 23:48:29
maverick2001 a écrit a écrit : function oterAccents($chaine) { return( strtr( $chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) ); } et ensuite tu passes un strToUpper |
Personnellement, je ferai le contraire :
1- on passe la variable en MAJUSCULE (strToUpper).
2- on traite la variable :
function oterAccents($chaine) {
return( strtr( $chaine,
"ÀÁÂÃÄÅÒÓÔÕÖÈÉÊËÇÌÍÎÏÙÚÛÜÑ",
"AAAAAAOOOOOEEEECIIIIUUUUN" ) );
}
-> Y-a déjà moins de cas à traiter non ??
Quand à savoir si c'est plus rapide qu'une Regexp... Pourquoi dire qu'une Regexp serait moins rapide ???
[edtdd]--Message édité par fly lm--[/edtdd]
Marsh Posté le 26-07-2001 à 01:14:39
Y'a pas qu'une seule méthode pour faire ça, chacun son truc.
Pour ce qui est de la rapidité, à mon avis, ça doit faire comme entre un ereg_replace et un str_replace.... Just 4 fun, compare un remplacement bateau et le temps que ca met sur un gros fichier texte. Avec ereg_replce, t'as toutes les chances d'avoir un 'maximum execution time'.
A toi de voir
Marsh Posté le 26-07-2001 à 10:14:39
maverick2001 a écrit a écrit : Y'a pas qu'une seule méthode pour faire ça, chacun son truc. Pour ce qui est de la rapidité, à mon avis, ça doit faire comme entre un ereg_replace et un str_replace.... Just 4 fun, compare un remplacement bateau et le temps que ca met sur un gros fichier texte. Avec ereg_replce, t'as toutes les chances d'avoir un 'maximum execution time'. A toi de voir |
OK, j'ai testé, effectivement c'est plus long avec la REGEXP...
Temps moyen pour la strstr : 0.0005 sec
Temps moyen pour la REGEXP : 0.0020 sec
Ce temps prends en compte le calcul du temps, mais bon il est le même pour les deux méthodes.
$pattern = array("'À'","'Á'","'Â'","'Ã'","'
Ä'","'Å'","'à'","'á'","'â'","'
ã'","'ä'","'å'","'Ò'","'Ó'","'
Ô'","'Õ'","'Ö'","'Ø'","'ò'","'
ó'","'ô'","'õ'","'ö'","'ø'","'
È'","'É'","'Ê'","'Ë'","'è'","'
é'","'ê'","'ë'","'Ç'","'ç'","'
Ì'","'Í'","'Î'","'Ï'","'ì'","'
í'","'î'","'ï'","'Ù'","'Ú'","'
Û'","'Ü'","'ù'","'ú'","'û'","'
ü'","'ÿ'","'Ñ'","'ñ'" );
$replace = array("A","A","A","A","A","A","a","
a","a","a","a","a","O","O","O","O
","O","O","o","o","o","o","o","o",
"E","E","E","E","e","e","e","e","
C","c","I","I","I","I","i","i","i
","i","U","U","U","U","u","u","u",
"u","y","N","n" );
$new = preg_replace($pattern,$replace,$var);
echo strToupper($new);
Comme quoi les REGEXP ne sont pas adaptées à ce cas...
Par ailleurs, j'ai dit une connerie hier soir, il ne faut pas faire le strtoupper() afin d'économiser des caractères de comparaison/substitution commme je l'avait dit. Le strToupper() ne converti pas les caractères accentués en leur équivalent majuscule...
@+
Marsh Posté le 26-07-2001 à 10:54:25
en plus les regexp passent par le moteur d'expression régulières de PhP et sont donc puissantes mais en général (et j'ai bien dit en général) plus lentes
Marsh Posté le 25-07-2001 à 10:37:07
Tout est dans le titre.
Avec strtoupper j'obtiens FOUGERES avec un accent sur la première occurence de la lettre "E".
Est-ce que c'est possible??