Discussion:
Jeux de caracteres de strftime
(trop ancien pour répondre)
Dominique Ottello
2011-03-28 13:38:37 UTC
Permalink
Bonjour,

Soit, par exemple :

$ma_date = strftime("%A %d %B %Y", $timestamp);

Comment peut-on connaître, avec certitude, le jeux de caractères qui est
utilisé pour le retour de, par exemple : samedi 26 février 2011
Le problème ne se pose que pour trois cas : février août décembre.
--
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net)
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Olivier Miakinen
2011-03-28 14:13:25 UTC
Permalink
Bonjour,
Post by Dominique Ottello
$ma_date = strftime("%A %d %B %Y", $timestamp);
Comment peut-on connaître, avec certitude, le jeux de caractères qui est
utilisé pour le retour de, par exemple : samedi 26 février 2011
Le problème ne se pose que pour trois cas : février août décembre.
Ta question aurait mérité d'être précisée. Par exemple, si le script
est censé tourner sur une machine où l'environnement ne change pas, il
te suffit de faire le test une fois pour savoir avec certitude ce que
retourne cette fonction.

Si le système d'exploitation et la version de PHP restent les mêmes
mais que la locale peut changer, alors un test de getlocale() pourrait
te donner l'info -- pourvu que tu connaisses les valeurs reconnues par
cette version du système, et leur influence sur la fonction strftime().

À l'autre extrémité du spectre des comportements, si tu ne sais rien à
priori du système et de sa config, la fonction pourrait très bien te
retourner une chaîne en chinois dans le charset Big5, une chaîne en
japonais dans l'un des ISO-2022 ou en Shift-JIS, ou que sais-je encore.
Dans ce cas je te souhaite bien du courage pour déterminer aussi bien
la langue que le charset.

Comme situation intermédiaire, si tu es sûr que la chaîne est en
français, et qu'elle sera dans l'un des charsets CP1252, ISO-8859-1,
ISO-8859-15 ou UTF-8, tu peux chercher un octet de valeur C3 qui
sera l'indicateur d'une minuscule accentuée (é = C3 A9, û = C3 BB)
alors que sa présence est impossible en français dans les autres
charsets cités (C3 = Ã). Pour d'autres cas, me consulter. ;-)

Quoi qu'il en soit, la *seule* solution certaine à 100 % consiste
à construire toi-même la chaîne de caractères à partir des valeurs
numériques : <http://fr2.php.net/manual/fr/function.strptime.php>.

Cordialement,
--
Olivier Miakinen
Dominique Ottello
2011-03-28 16:19:51 UTC
Permalink
Post by Olivier Miakinen
Ta question aurait mérité d'être précisée. Par exemple, si le script
est censé tourner sur une machine où l'environnement ne change pas, il
te suffit de faire le test une fois pour savoir avec certitude ce que
retourne cette fonction.
Pour préciser, il s'agit de la localisation des dates sur un forum
FluxBB.
En ce qui concerne ma mise au point locale ainsi que les deux hébergeurs
que j'utilise, ça ne pose pas de problème puisque je suis certain (J'ai
testé) du jeu de caractères retourné.
De base, le forum est livré avec la fonction gmdate() et, j'ai écrit une
« mod » pour obtenir les dates « à la Française » en m'arrangeant pour
que ça fonctionne correctement sur les trois (local et 2 hébergeurs) et
pour obtenir le résultat en utf-8 :

setlocale(LC_TIME,'fr_FR','French_France.1252','fr_FR.ISO8859-1');
$date = iconv('ISO-8859-1', 'UTF-8//TRANSLIT//IGNORE',
strftime($date_format, $timestamp));
Post by Olivier Miakinen
À l'autre extrémité du spectre des comportements, si tu ne sais rien à
priori du système et de sa config, la fonction pourrait très bien te
retourner une chaîne en chinois dans le charset Big5, une chaîne en
japonais dans l'un des ISO-2022 ou en Shift-JIS, ou que sais-je encore.
Dans ce cas je te souhaite bien du courage pour déterminer aussi bien
la langue que le charset.
Et bien voilà, c'est bien le genre de truc auquel je pensais.

Comme pour d'autres « mod » que j'ai écrites pour FluxBB, j'aurais
souhaité en faire profiter la communauté, mais je crains fort que cela
relève des travaux d'Hercule au minimum.
Je vais donc rester cantonné à la localisation Française.
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
Continuer la lecture sur narkive:
Loading...