IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Conflit entre accents et strtoupper()


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut Conflit entre accents et strtoupper()
    Bonjour à tous !
    Pourquoi la fonction strtoupper() ne met pas en majuscule les caractères accentués ? Est-ce qu'il y a une autre fonction qui le ferait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $texte = "Bonjour Joël";
    echo strtoupper($texte);
    //AFFICHERA: BONJOUR JOëL
    Merci !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 34
    Points
    34
    Par défaut
    Bonjour bonjour,

    Description
    string strtoupper ( string $string )

    strtoupper() retourne string, après avoir converti tous les caractères alphabétiques en majuscules.

    Notez que la notion d'"alphabétique" est déterminée par la configuration de localisation. Cela signifie que pour la configuration par défaut "C", les caractères tels que les voyelles accentuées (comme é, è ou à) ne seront pas converties.
    source : http://fr.php.net/manual/fr/function.strtoupper.php

    Regard la ca peut peut être t'aider :

    http://fr.php.net/manual/fr/function.mb-strtoupper.php

    mb_strtoupper

    (PHP 4 >= 4.3.0, PHP 5)

    mb_strtoupper — Met tous les caractères en majuscules
    Description
    string mb_strtoupper ( string $str [, string $encoding] )

    mb_strtoupper() retourne la chaîne str après avoir converti tous les caractères alphabétiques en majuscules.

    encoding spécifie le jeu de caractères de la chaîne str ; s'il est omis, le jeu de caractères interne sera utilisé.

  3. #3
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    j'ai essayé mb_strtoupper( $mavariable, 'UTF-8')
    rien ne fonctionne encore...

    Qu'elle sont les encoding que je pourrais essayer dans mis à part l'UTF-8 ??

    Il y a beaucoup d'information sur mb_strtoupper sauf qu'il n'y en a pas qui explique comme il faut les encoding possible et leurs effets !?

    mb_strtoupper( $mavariable, '?encoding?')

    quelqu'un à un élément de réponse?

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Tu as ça comme encodage aussi :

    ISO-8859-1

    Sinon, si c'est juste pour de l'affichage, tu peux en CSS utiliser
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    text-transform:uppercase;

  5. #5
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Hontes à moi et à toute ma descendance !!!
    Les CSS...pourquoi n'y ai-je pas pensé plus tôt ?
    Merci Bisounours !

  6. #6
    lr
    lr est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Points : 114
    Points
    114
    Par défaut
    Salut,

    Personnellement, je ne peux pas utiliser de css mais j'ai besoin de mettre en majuscule une chaîne susceptible de contenir des caractères accentués.

    Malheureusement, strtoupper mb_strtoupper donnent le même résultat :
    "société" devient "SOCIéTé".

    Y a-t-il une solution ?

    Merci d'avance

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Comme dit dans la doc PHP :

    Notez que la notion d'"alphabétique" est déterminée par la configuration de localisation. Cela signifie que pour la configuration par défaut "C", les caractères tels que les voyelles accentuées (comme é, è ou à) ne seront pas converties.
    Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale( LC_CTYPE, 'fr_FR' );
    devrait faire l'affaire.

  8. #8
    lr
    lr est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Comme dit dans la doc PHP :



    Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale( LC_CTYPE, 'fr_FR' );
    devrait faire l'affaire.
    Merci pour ta réponse. Malheureusement, ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo strtoupper( "société" );
    echo mb_strtoupper( "société" );
    setlocale( LC_CTYPE, 'fr_FR' );
    echo strtoupper( "société" );
    echo mb_strtoupper( "société" );
    donne
    SOCIéTéSOCIéTéSOCIéTéSOCIéTé

  9. #9
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Que te retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print( setlocale( LC_ALL, null ) );
    print_r( localeconv() );
    echo strtoupper( 'société' );

  10. #10
    lr
    lr est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Que te retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print( setlocale( LC_ALL, null ) );
    print_r( localeconv() );
    echo strtoupper( 'société' );
    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
    CArray
    (
        [decimal_point] => .
        [thousands_sep] => 
        [int_curr_symbol] => 
        [currency_symbol] => 
        [mon_decimal_point] => 
        [mon_thousands_sep] => 
        [positive_sign] => 
        [negative_sign] => 
        [int_frac_digits] => 127
        [frac_digits] => 127
        [p_cs_precedes] => 127
        [p_sep_by_space] => 127
        [n_cs_precedes] => 127
        [n_sep_by_space] => 127
        [p_sign_posn] => 127
        [n_sign_posn] => 127
        [grouping] => Array
            (
            )
     
        [mon_grouping] => Array
            (
            )
     
    )
    SOCIéTé

  11. #11
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Heu ... T'as un serveur Windows quand tu fais tes tests ?

    Si oui, c'est ça qu'il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale( LC_ALL, 'french' );
    Et pour le serveur Linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale( LC_ALL, 'fr_FR' );
    Donc si tu es sous Windows, que te donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print( setlocale( LC_ALL, 'french' ) );
    print_r( localeconv() );
    echo strtoupper( 'société' );
    ?

  12. #12
    lr
    lr est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Heu ... T'as un serveur Windows quand tu fais tes tests ?
    Non, je suis sous ubuntu et le site tournera sur un serveur linux... Est-ce que ça pourrait venir d'un problème de configuration de PHP ?

  13. #13
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    A priori non, puisque ça provient des locales de ton serveur.

    Et que te donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print( setlocale( LC_ALL, 'fr_FR' ) );
    print_r( localeconv() );
    echo strtoupper( 'société' );
    ?

    Sinon tu peux essayer de configurer les locales au niveau de ton serveur :
    http://www.developpez.net/forums/d21...gurer-locales/

  14. #14
    lr
    lr est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Et que te donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print( setlocale( LC_ALL, 'fr_FR' ) );
    print_r( localeconv() );
    echo strtoupper( 'société' );
    ?
    Pareil :
    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
    Array
    (
        [decimal_point] => .
        [thousands_sep] => 
        [int_curr_symbol] => 
        [currency_symbol] => 
        [mon_decimal_point] => 
        [mon_thousands_sep] => 
        [positive_sign] => 
        [negative_sign] => 
        [int_frac_digits] => 127
        [frac_digits] => 127
        [p_cs_precedes] => 127
        [p_sep_by_space] => 127
        [n_cs_precedes] => 127
        [n_sep_by_space] => 127
        [p_sign_posn] => 127
        [n_sign_posn] => 127
        [grouping] => Array
            (
            )
     
        [mon_grouping] => Array
            (
            )
     
    )
    SOCIéTé
    [/QUOTE]Sinon tu peux essayer de configurer les locales au niveau de ton serveur :
    http://www.developpez.net/forums/d21...gurer-locales/[/QUOTE]
    Ca ne me plaît pas trop... Si je dois faire ça, dieu sait ce que ça donnera sur le serveur de prod

  15. #15
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Tu dois avoir une configuration bizarre au niveau de ton serveur, pour que même la fonction mb_strtoupper() ne fonctionne pas, puisqu'il est dit dans la doc :

    Contrairement à strtoupper(), le concept de caractère 'alphabétique' est déterminé par les propriétés Unicode. De ce fait, le comportement de cette fonction n'est pas modifié par les configurations locales, et elle peut convertir tout les caractères qui sont considérés comme alphabétiques comme le c cédille (ç).
    Et si c'est le cas, je pense que ça dépasse mes compétences.
    Tu peux toujours essayer la fonction mb_convert_case(), mais j'y crois pas trop, si mb_strtoupper() est inefficace.

    Dans ce cas la seule solution qu'il te reste est celle du recensement des accents et de faire la correspondance avec un strtr().

  16. #16
    lr
    lr est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 338
    Points : 114
    Points
    114
    Par défaut
    Rien à faire, j'ai essayé sur ma machine (ubuntu), sur un serveur de développement (redhat) et chez mon hébergeur, même résultat...

    Je vais sûrement devoir faire une fonction spécifique :
    merci pour ton aide

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bizarre que ton mb_strtoupper ne fonctionne pas.
    Chez moi mb_strtoupper($variable,'UTF-8') fonctionne sans problème.
    Ta base est-elle bien en UTF-8 ?

  18. #18
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 424
    Points : 878
    Points
    878
    Par défaut
    pour infos,

    mb_strtoupper($variable) ne fonctionne pas chez moi
    si je rajoute le paramétre pourtant optionnel ça fonctionne bien avec mb_strtoupper($variable,'UTF-8')

  19. #19
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Michael REMY
    mb_strtoupper($variable) ne fonctionne pas chez moi
    si je rajoute le paramétre pourtant optionnel ça fonctionne bien avec mb_strtoupper($variable,'UTF-8')
    Il faudrait voir ce qu'il y a du coté de ton php.ini pour tout ce qui concerne [mbstring]
    Ca se peut qu'il y est rien de défini en particulier, ou un autre encodage que UTF-8.
    Si c'est le cas, alors il faudra le faire, soit dans le .htaccess, soit avec des ini_set('config', 'valeur'), (si possible au tout début).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ini_set('mbstring.language', 'UTF-8');
    ini_set('mbstring.internal_encoding', 'UTF-8');
    ini_set('mbstring.http_input', 'UTF-8');
    ini_set('mbstring.http_output', 'UTF-8');
    ini_set('mbstring.detect_order', 'auto');

  20. #20
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Utilisez mb_strtoupper()
    Avec cette fonction ça convertit également les accent!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Conflit entre javascript et script ASP
    Par Mvu dans le forum ASP
    Réponses: 2
    Dernier message: 22/02/2005, 16h28
  2. Possibles conflits entre GL, GLAUX et GLUT
    Par barthelv dans le forum GLUT
    Réponses: 1
    Dernier message: 19/11/2004, 12h31
  3. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40
  4. conflit entre couleurs
    Par khayyam90 dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/07/2004, 18h00
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo