Je ne sais pas pourquoi, mais les histoires d'accents me poursuivent... (:
J'ai un magnifique formulaire où les gens saisissent leur nom (pas que ça,
évidemment).
Pour faire quelque chose de propret, j'avais décidé de mettre le nom en
capitales, quelque chose du genre :
$nom=trim($_POST['nom']);
if ($nom!='')
{$_SESSION['nom']=strtoupper($nom);}
Le problème est bien sûr la mise en majuscule des caractères accentués...
J'ai testé mon formulaire après avoir ajouté cette fonction : tout allait
bien, les é devenaient É, les à devenaient À, etc. Je demande à mon homme
de tester... il me dit que ça ne marche pas, les é restent é, etc.
Je me dis, bizarre, faut que je réessaye : pas de problème, les lettres
accentuées passent sans problème en majuscule.
Je reteste aujourd'hui (en utilisant le même nom) : ça ne marche pas, les
lettres accentuées restent en minuscule.
Le manuel dit que ça ne marche jamais...
Le PHP aurait-il un côté farceur qui m'aurait échappé ? (:
dans (in) fr.comp.lang.php, Olivier Miakinen <om+ ecrivait (wrote) :
Bonjour,
Il semble (je suis prudente, hein) qu'en mettant setlocale(LC_CTYPE, 'french'); cela fonctionne.
Attention cependant, si un jour tu changes d'hébergeur tu devras peut-être remplacer ce 'french' par autre chose
Question d'un béotien qui se passionne depuis longtemps pour l'encodage des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de s'affranchir de façon plus durable et systématique des problèmes rencontrés par Pascale ?
-- Eric
dans (in) fr.comp.lang.php, Olivier Miakinen <om+news@miakinen.net>
ecrivait (wrote) :
Bonjour,
Il semble (je suis prudente, hein) qu'en mettant
setlocale(LC_CTYPE, 'french');
cela fonctionne.
Attention cependant, si un jour tu changes d'hébergeur tu devras
peut-être remplacer ce 'french' par autre chose
Question d'un béotien qui se passionne depuis longtemps pour l'encodage
des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage
universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de
s'affranchir de façon plus durable et systématique des problèmes
rencontrés par Pascale ?
dans (in) fr.comp.lang.php, Olivier Miakinen <om+ ecrivait (wrote) :
Bonjour,
Il semble (je suis prudente, hein) qu'en mettant setlocale(LC_CTYPE, 'french'); cela fonctionne.
Attention cependant, si un jour tu changes d'hébergeur tu devras peut-être remplacer ce 'french' par autre chose
Question d'un béotien qui se passionne depuis longtemps pour l'encodage des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de s'affranchir de façon plus durable et systématique des problèmes rencontrés par Pascale ?
-- Eric
Mickael Wolff
$nom=trim($_POST['nom']); if ($nom!='') {$_SESSION['nom']=strtoupper($nom);}
Il y a eu un long troll sur fclc à propos de ces magnifiques fonctions de l'API C qui compliquent la vie des gentils programmeurs. En regardant dans le source de PHP, on s'aperçoit que PHP ne fait pas de traitement spécifique avant d'utiliser la fonction, donc tous les bugs de la fonction ressurgissent.
Extrait du fichier ./ext/standard/string.c du paquet PHP :
$nom=trim($_POST['nom']);
if ($nom!='')
{$_SESSION['nom']=strtoupper($nom);}
Il y a eu un long troll sur fclc à propos de ces magnifiques fonctions
de l'API C qui compliquent la vie des gentils programmeurs. En regardant
dans le source de PHP, on s'aperçoit que PHP ne fait pas de traitement
spécifique avant d'utiliser la fonction, donc tous les bugs de la
fonction ressurgissent.
Extrait du fichier ./ext/standard/string.c du paquet PHP :
$nom=trim($_POST['nom']); if ($nom!='') {$_SESSION['nom']=strtoupper($nom);}
Il y a eu un long troll sur fclc à propos de ces magnifiques fonctions de l'API C qui compliquent la vie des gentils programmeurs. En regardant dans le source de PHP, on s'aperçoit que PHP ne fait pas de traitement spécifique avant d'utiliser la fonction, donc tous les bugs de la fonction ressurgissent.
Extrait du fichier ./ext/standard/string.c du paquet PHP :
Question d'un béotien qui se passionne depuis longtemps pour l'encodage des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de s'affranchir de façon plus durable et systématique des problèmes rencontrés par Pascale ?
Pas avec strtoupper. En revanche, cela pourrait marcher avec : 1) $nom = mb_convert_case($nom, MB_CASE_UPPER, "UTF-8"); 2) $nom = mb_strtoupper($nom, "UTF-8");
Du coup, cela devrait *aussi* marcher en ISO-8859-15 avec : 1) $nom = mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15"); 2) $nom = mb_strtoupper($nom, "ISO-8859-15");
... et c'est probablement beaucoup plus portable d'un hébergeur à un autre que de jouer avec le setlocale().
Question d'un béotien qui se passionne depuis longtemps pour l'encodage
des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage
universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de
s'affranchir de façon plus durable et systématique des problèmes
rencontrés par Pascale ?
Pas avec strtoupper. En revanche, cela pourrait marcher avec :
1) $nom = mb_convert_case($nom, MB_CASE_UPPER, "UTF-8");
2) $nom = mb_strtoupper($nom, "UTF-8");
Du coup, cela devrait *aussi* marcher en ISO-8859-15 avec :
1) $nom = mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15");
2) $nom = mb_strtoupper($nom, "ISO-8859-15");
... et c'est probablement beaucoup plus portable d'un hébergeur à un
autre que de jouer avec le setlocale().
Question d'un béotien qui se passionne depuis longtemps pour l'encodage des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de s'affranchir de façon plus durable et systématique des problèmes rencontrés par Pascale ?
Pas avec strtoupper. En revanche, cela pourrait marcher avec : 1) $nom = mb_convert_case($nom, MB_CASE_UPPER, "UTF-8"); 2) $nom = mb_strtoupper($nom, "UTF-8");
Du coup, cela devrait *aussi* marcher en ISO-8859-15 avec : 1) $nom = mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15"); 2) $nom = mb_strtoupper($nom, "ISO-8859-15");
... et c'est probablement beaucoup plus portable d'un hébergeur à un autre que de jouer avec le setlocale().
Mickael Wolff
Question d'un béotien qui se passionne depuis longtemps pour l'encodage des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de s'affranchir de façon plus durable et systématique des problèmes rencontrés par Pascale ?
Je t'encourage à lire le thread que j'ai signalé dans un autre message en réponse à ce fil. Il semblerait que UTF-8, ne soit pas la solution absolue. Il est à noter que le support multibyte de PHP n'est pas natif... mais il devrait l'être dans PHP6 (c'est à dire que toutes les chaînes de caractère seraient à caractères multibyte).
Question d'un béotien qui se passionne depuis longtemps pour l'encodage
des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage
universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de
s'affranchir de façon plus durable et systématique des problèmes
rencontrés par Pascale ?
Je t'encourage à lire le thread que j'ai signalé dans un autre message
en réponse à ce fil. Il semblerait que UTF-8, ne soit pas la solution
absolue. Il est à noter que le support multibyte de PHP n'est pas
natif... mais il devrait l'être dans PHP6 (c'est à dire que toutes les
chaînes de caractère seraient à caractères multibyte).
Question d'un béotien qui se passionne depuis longtemps pour l'encodage des jeux de caractères : l'utilisation d'utf-8 (sensé proposer un codage universel ou presque) plutôt que d'iso-8859-15, ne permettrait pas de s'affranchir de façon plus durable et systématique des problèmes rencontrés par Pascale ?
Je t'encourage à lire le thread que j'ai signalé dans un autre message en réponse à ce fil. Il semblerait que UTF-8, ne soit pas la solution absolue. Il est à noter que le support multibyte de PHP n'est pas natif... mais il devrait l'être dans PHP6 (c'est à dire que toutes les chaînes de caractère seraient à caractères multibyte).
setlocale(LC_CTYPE, 'french.ISO-8859-15') fonctionne parfaitement, y compris avec les ÿ, les ¨, les ½, les ç et autres joyeusetés !
Génial ! Malgré tout, puisque la question d'Éric Demeester m'a fait repenser aux fonctions mb_*, si tu as 5 minutes tu devrais peut-être tester avec mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") et mb_strtoupper($nom, "ISO-8859-15"). Surtout quand on voit comment PHP implémente strtoupper (cf. article de Mickael Wolff).
setlocale(LC_CTYPE, 'french.ISO-8859-15') fonctionne parfaitement, y
compris avec les ÿ, les ¨, les ½, les ç et autres joyeusetés !
Génial ! Malgré tout, puisque la question d'Éric Demeester m'a fait
repenser aux fonctions mb_*, si tu as 5 minutes tu devrais peut-être
tester avec mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") et
mb_strtoupper($nom, "ISO-8859-15"). Surtout quand on voit comment PHP
implémente strtoupper (cf. article de Mickael Wolff).
setlocale(LC_CTYPE, 'french.ISO-8859-15') fonctionne parfaitement, y compris avec les ÿ, les ¨, les ½, les ç et autres joyeusetés !
Génial ! Malgré tout, puisque la question d'Éric Demeester m'a fait repenser aux fonctions mb_*, si tu as 5 minutes tu devrais peut-être tester avec mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") et mb_strtoupper($nom, "ISO-8859-15"). Surtout quand on voit comment PHP implémente strtoupper (cf. article de Mickael Wolff).
Pascale
Mickael Wolff écrivait news:4751c2eb$0$20318$:
La discussion dans fclc s'appelait « Combinaison min/MAJ », et c'était pas piqué des vers ^^;
Ces 2 solutions fonctionnent parfaitement (j'ai viré setlocale). Il y en a une qui est préférable à l'autre pour quelque raison ?
-- Pascale
Pascale
Olivier Miakinen <om+ écrivait news:4751cd44$:
Génial ! Malgré tout, puisque la question d'Éric Demeester m'a fait repenser aux fonctions mb_*, si tu as 5 minutes tu devrais peut-être tester avec mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") et mb_strtoupper($nom, "ISO-8859-15"). Surtout quand on voit comment PHP implémente strtoupper (cf. article de Mickael Wolff).
Oui, viens de voir ça, donc ça m'intéresse de tester cette autre solution. D'abord, j'ai un poulet à faire cuire, donc le temps de hacker la cuisinière à gaz et je m'en occupe.
Je croyais poser une question c.. et finalement, elle est plus coriace que je ne croyais...
Génial ! Malgré tout, puisque la question d'Éric Demeester m'a fait
repenser aux fonctions mb_*, si tu as 5 minutes tu devrais peut-être
tester avec mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") et
mb_strtoupper($nom, "ISO-8859-15"). Surtout quand on voit comment PHP
implémente strtoupper (cf. article de Mickael Wolff).
Oui, viens de voir ça, donc ça m'intéresse de tester cette autre solution.
D'abord, j'ai un poulet à faire cuire, donc le temps de hacker la
cuisinière à gaz et je m'en occupe.
Je croyais poser une question c.. et finalement, elle est plus coriace que
je ne croyais...
Génial ! Malgré tout, puisque la question d'Éric Demeester m'a fait repenser aux fonctions mb_*, si tu as 5 minutes tu devrais peut-être tester avec mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") et mb_strtoupper($nom, "ISO-8859-15"). Surtout quand on voit comment PHP implémente strtoupper (cf. article de Mickael Wolff).
Oui, viens de voir ça, donc ça m'intéresse de tester cette autre solution. D'abord, j'ai un poulet à faire cuire, donc le temps de hacker la cuisinière à gaz et je m'en occupe.
Je croyais poser une question c.. et finalement, elle est plus coriace que je ne croyais...
Ces 2 solutions fonctionnent parfaitement (j'ai viré setlocale).
Parfait. Ça t'évitera quelques cheveux blancs si un jour tu changes d'hébergeur (ou si ton hébergeur change de version du système).
Il y en a une qui est préférable à l'autre pour quelque raison ?
Ça c'est une question qui revient souvent avec les fonctions PHP : elles sont tellement nombreuses qu'il y a souvent plusieurs façons de faire la même chose. À mon avis, tu peux tirer à pile ou face, ou bien choisir celle que tu préfères selon le critère que tu voudras (plus lisible, plus courte à taper, plus simple à retenir, plus générique, etc.)
Ces 2 solutions fonctionnent parfaitement (j'ai viré setlocale).
Parfait. Ça t'évitera quelques cheveux blancs si un jour tu changes
d'hébergeur (ou si ton hébergeur change de version du système).
Il y en a une qui est préférable à l'autre pour quelque raison ?
Ça c'est une question qui revient souvent avec les fonctions PHP : elles
sont tellement nombreuses qu'il y a souvent plusieurs façons de faire la
même chose. À mon avis, tu peux tirer à pile ou face, ou bien choisir
celle que tu préfères selon le critère que tu voudras (plus lisible,
plus courte à taper, plus simple à retenir, plus générique, etc.)
Ces 2 solutions fonctionnent parfaitement (j'ai viré setlocale).
Parfait. Ça t'évitera quelques cheveux blancs si un jour tu changes d'hébergeur (ou si ton hébergeur change de version du système).
Il y en a une qui est préférable à l'autre pour quelque raison ?
Ça c'est une question qui revient souvent avec les fonctions PHP : elles sont tellement nombreuses qu'il y a souvent plusieurs façons de faire la même chose. À mon avis, tu peux tirer à pile ou face, ou bien choisir celle que tu préfères selon le critère que tu voudras (plus lisible, plus courte à taper, plus simple à retenir, plus générique, etc.)
Pascale
Olivier Miakinen <om+ écrivait news:47532197$:
Parfait. Ça t'évitera quelques cheveux blancs si un jour tu changes d'hébergeur (ou si ton hébergeur change de version du système).
Ça peut toujours arriver... et j'ai déjà bien assez de cheveux blancs...
Ça c'est une question qui revient souvent avec les fonctions PHP : elles sont tellement nombreuses qu'il y a souvent plusieurs façons de faire la même chose.
J'avais cru remarquer, en effet (!)
À mon avis, tu peux tirer à pile ou face, ou bien choisir celle que tu préfères selon le critère que tu voudras (plus lisible, plus courte à taper, plus simple à retenir, plus générique, etc.)
C'est ce que j'ai fait : mb_strtoupper($nom, "ISO-8859-15") l'emporte d'une courte tête sur mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") (:
Parfait. Ça t'évitera quelques cheveux blancs si un jour tu changes
d'hébergeur (ou si ton hébergeur change de version du système).
Ça peut toujours arriver... et j'ai déjà bien assez de cheveux blancs...
Ça c'est une question qui revient souvent avec les fonctions PHP : elles
sont tellement nombreuses qu'il y a souvent plusieurs façons de faire la
même chose.
J'avais cru remarquer, en effet (!)
À mon avis, tu peux tirer à pile ou face, ou bien choisir
celle que tu préfères selon le critère que tu voudras (plus lisible,
plus courte à taper, plus simple à retenir, plus générique, etc.)
C'est ce que j'ai fait : mb_strtoupper($nom, "ISO-8859-15") l'emporte d'une
courte tête sur mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") (:
Parfait. Ça t'évitera quelques cheveux blancs si un jour tu changes d'hébergeur (ou si ton hébergeur change de version du système).
Ça peut toujours arriver... et j'ai déjà bien assez de cheveux blancs...
Ça c'est une question qui revient souvent avec les fonctions PHP : elles sont tellement nombreuses qu'il y a souvent plusieurs façons de faire la même chose.
J'avais cru remarquer, en effet (!)
À mon avis, tu peux tirer à pile ou face, ou bien choisir celle que tu préfères selon le critère que tu voudras (plus lisible, plus courte à taper, plus simple à retenir, plus générique, etc.)
C'est ce que j'ai fait : mb_strtoupper($nom, "ISO-8859-15") l'emporte d'une courte tête sur mb_convert_case($nom, MB_CASE_UPPER, "ISO-8859-15") (: