J'ai une fonction qui « capitalise » les mots de façon un peu meilleur
que ucwords :
function ucsmart($texte) {
return stripslashes(preg_replace('/(\W|^)(\w)/e',
'"$1".strtoupper("$2")', strtolower($texte)));
}
Le problème est que \W et \w dépendent de la locale (pour les
majuscules accentuées). J'ai donc placé quelque part (un fichier qui
est inclus pour tout le site) un setlocale approprié :
setlocale(LC_ALL, 'fr_FR', 'french', 'fr');
Le problème est que ça marche dans tous les petits tests que je fais et
que sur le site (http://www.clubamis2cv.org/, sur les noms des villes
sur la droite), ça marche parfois (il suffit de recharger la page). Le
comportement est identique si je le place dans la fonction ou n'importe
où ailleurs.
Une idée pour que le comportement devienne déterministe ?
Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://www.cadichonne.net/>
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
J'ai une fonction qui « capitalise » les mots de façon un peu meilleur que ucwords :
function ucsmart($texte) { return stripslashes(preg_replace('/(W|^)(w)/e', '"$1".strtoupper("$2")', strtolower($texte))); }
Tiens, je te remercie de me rafraîchir la mémoire à propos de l'option 'e' de preg_replace(). Je ne l'ai encore jamais utilisée, mais ça peut être pratique.
Le problème est que W et w dépendent de la locale (pour les majuscules accentuées). J'ai donc placé quelque part (un fichier qui est inclus pour tout le site) un setlocale approprié : setlocale(LC_ALL, 'fr_FR', 'french', 'fr');
Il n'y a pas que W et w qui dépendent de la locale, mais aussi strtolower() et strtoupper().
Le problème est que ça marche dans tous les petits tests que je fais et que sur le site (http://www.clubamis2cv.org/, sur les noms des villes sur la droite), ça marche parfois (il suffit de recharger la page).
Tu veux dire que sur un système donné dans une config donnée et pour un mot donné cela marche parfois mais pas toujours ? Voilà qui est fort curieux.
Une idée pour que le comportement devienne déterministe ?
Peut-être remplacer w par [a-zà-þ], W par [^a-zà-þ], et réécrire les fonctions strtolower() et strtoupper() au moyen d'autres preg_replace() (mes exemples pour w et W sont en supposant ISO-8859-1, et en espérant qu'il n'y ait pas de caractère ÷, sinon il faut compliquer un peu le truc).
Attention : si cela marche toujours sur certains systèmes et jamais sur d'autres, plutôt qu'aléatoirement sur un système donné, c'est peut-être parce que le paramètre du setlocale() n'est pas le bon là où ça ne fonctionne pas.
J'ai une fonction qui « capitalise » les mots de façon un peu meilleur
que ucwords :
function ucsmart($texte) {
return stripslashes(preg_replace('/(W|^)(w)/e',
'"$1".strtoupper("$2")', strtolower($texte)));
}
Tiens, je te remercie de me rafraîchir la mémoire à propos de l'option
'e' de preg_replace(). Je ne l'ai encore jamais utilisée, mais ça peut
être pratique.
Le problème est que W et w dépendent de la locale (pour les
majuscules accentuées). J'ai donc placé quelque part (un fichier qui
est inclus pour tout le site) un setlocale approprié :
setlocale(LC_ALL, 'fr_FR', 'french', 'fr');
Il n'y a pas que W et w qui dépendent de la locale, mais aussi
strtolower() et strtoupper().
Le problème est que ça marche dans tous les petits tests que je fais et
que sur le site (http://www.clubamis2cv.org/, sur les noms des villes
sur la droite), ça marche parfois (il suffit de recharger la page).
Tu veux dire que sur un système donné dans une config donnée et pour un
mot donné cela marche parfois mais pas toujours ? Voilà qui est fort
curieux.
Une idée pour que le comportement devienne déterministe ?
Peut-être remplacer w par [a-zà-þ], W par [^a-zà-þ], et réécrire les
fonctions strtolower() et strtoupper() au moyen d'autres preg_replace()
(mes exemples pour w et W sont en supposant ISO-8859-1, et en espérant
qu'il n'y ait pas de caractère ÷, sinon il faut compliquer un peu le truc).
Attention : si cela marche toujours sur certains systèmes et jamais sur
d'autres, plutôt qu'aléatoirement sur un système donné, c'est peut-être
parce que le paramètre du setlocale() n'est pas le bon là où ça ne
fonctionne pas.
J'ai une fonction qui « capitalise » les mots de façon un peu meilleur que ucwords :
function ucsmart($texte) { return stripslashes(preg_replace('/(W|^)(w)/e', '"$1".strtoupper("$2")', strtolower($texte))); }
Tiens, je te remercie de me rafraîchir la mémoire à propos de l'option 'e' de preg_replace(). Je ne l'ai encore jamais utilisée, mais ça peut être pratique.
Le problème est que W et w dépendent de la locale (pour les majuscules accentuées). J'ai donc placé quelque part (un fichier qui est inclus pour tout le site) un setlocale approprié : setlocale(LC_ALL, 'fr_FR', 'french', 'fr');
Il n'y a pas que W et w qui dépendent de la locale, mais aussi strtolower() et strtoupper().
Le problème est que ça marche dans tous les petits tests que je fais et que sur le site (http://www.clubamis2cv.org/, sur les noms des villes sur la droite), ça marche parfois (il suffit de recharger la page).
Tu veux dire que sur un système donné dans une config donnée et pour un mot donné cela marche parfois mais pas toujours ? Voilà qui est fort curieux.
Une idée pour que le comportement devienne déterministe ?
Peut-être remplacer w par [a-zà-þ], W par [^a-zà-þ], et réécrire les fonctions strtolower() et strtoupper() au moyen d'autres preg_replace() (mes exemples pour w et W sont en supposant ISO-8859-1, et en espérant qu'il n'y ait pas de caractère ÷, sinon il faut compliquer un peu le truc).
Attention : si cela marche toujours sur certains systèmes et jamais sur d'autres, plutôt qu'aléatoirement sur un système donné, c'est peut-être parce que le paramètre du setlocale() n'est pas le bon là où ça ne fonctionne pas.
Mathieu Goutelle
Bonsoir,
Dans l'article <45536321$, Olivier Miakinen a écrit :
Tu veux dire que sur un système donné dans une config donnée et pour un mot donné cela marche parfois mais pas toujours ? Voilà qui est fort curieux.
Ça sert toujours à quelque chose de discuter de ses problèmes : cela ne pourrait-il pas venir d'un load balancing sur plusieurs machines, dont l'une n'aurait pas la locale 'fr' installée ?
Je vais investiguer de ce côté avec l'hébergeur... Merci pour l'inspiration, Cordialement, -- Q: Connaissez-vous la différence entre l'ignorance et l'apathie ? R: J'en sais rien et je m'en fous. Mathieu Goutelle - http://www.cadichonne.net/
Bonsoir,
Dans l'article <45536321$1@neottia.net>, Olivier Miakinen a écrit :
Tu veux dire que sur un système donné dans une config donnée et pour
un mot donné cela marche parfois mais pas toujours ? Voilà qui est
fort curieux.
Ça sert toujours à quelque chose de discuter de ses problèmes : cela ne
pourrait-il pas venir d'un load balancing sur plusieurs machines, dont
l'une n'aurait pas la locale 'fr' installée ?
Je vais investiguer de ce côté avec l'hébergeur...
Merci pour l'inspiration,
Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - http://www.cadichonne.net/
Dans l'article <45536321$, Olivier Miakinen a écrit :
Tu veux dire que sur un système donné dans une config donnée et pour un mot donné cela marche parfois mais pas toujours ? Voilà qui est fort curieux.
Ça sert toujours à quelque chose de discuter de ses problèmes : cela ne pourrait-il pas venir d'un load balancing sur plusieurs machines, dont l'une n'aurait pas la locale 'fr' installée ?
Je vais investiguer de ce côté avec l'hébergeur... Merci pour l'inspiration, Cordialement, -- Q: Connaissez-vous la différence entre l'ignorance et l'apathie ? R: J'en sais rien et je m'en fous. Mathieu Goutelle - http://www.cadichonne.net/