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

MkFramework Discussion :

Problème utf8 caractères accentués sur serveur OVH


Sujet :

MkFramework

  1. #1
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Problème utf8 caractères accentués sur serveur OVH
    Bonjour à Tous,

    Le problème a peu être déjà été évoqué mais je n'en ai pas trouvé trace...
    J'ai développé mon application en local :
    (mysql : tables en utf8-general-ci, pages php codées utf8 ; php version 5.6.19, charset=UTF-8 dans site.ini, etc...).
    Cela fonctionne correctement : les caractères accentuées en "dur" des pages php comme les retours de requêtes SQL s'affichent correctement dans FireFox.
    J'ai porté mon appli sur mon compte OVH (mutualisé php version 5.2.17) interclassement de la base et des tables : utf8_general_ci. Les caractères accentuées en "dur" des pages php s'affichent correctement mais pas ceux venant des requêtes SQL.
    Je précise que j'ai fait le test en ajoutant des enregistrements directement dans la BD via phpmyAdmin/OVH. Par exemple pour une table de profil de connexion : prénom, identifiant, password. A la saisie identifiant/password, la session applicative s'ouvre bien mais les prénoms avec caractères accentués sont mal formatés (Ma?t? au lieu de Maïté par exemple).
    J'ai fait des essais avec ce qu'on peut trouver sur le web mais rien n'y fait.... désespoir...énervement...rage
    Y a t-i un paramétrage du framework ou des instructions à ajouter dans les classes de modèles ??

    Merci d'avance pour votre aide.

    JF

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Vous pouvez essayer de le préciser dans le fichier de connexion, par exemple: (en ajoutant le charset à la chaine de connexion)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mysqlExple.dsn="mysql:dbname=blog;host=localhost;charset=UTF8"
    mysqlExple.sgbd=pdo_mysql
    mysqlExple.username=root
    mysqlExple.password=xxxx
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut problème utf8 caractères accentués sur serveur OVH : problème persistant
    bonjour,
    Merci pour cette réponse rapide mais cela ne résout pas le problème. J'avais déjà essayé cette piste.
    Y a t-il une méthodologie permettant de cerner le problème. J'avoue être à cours d'idées.
    Salutations
    JF

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Et dans le fichier conf/site.ini.php ? il y a bien UTF-8 ?

    note: dans votre navigateur, quel encodage est utilisé ? si vous le changez pour iso ou Utf8 ça résout le problème ?

    dans chrome: menu > plus d'outils > codage
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour Mika,

    Extrait du fichier conf/site.ini.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [encodage]
    ;indique l'encodage des fichiers de code, utilise pour la protection des tableaux de contexte ($_GET,$_POST)
    charset=UTF-8
    ;indique si le framework encode en html le code deja en html
    double_encode=0
    J'ai réalisé un script élémentaire suivant :
    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
    <!DOCTYPE html>
    <html lang="fr">
      <head>
        <meta charset="utf-8">
      </head>
      <body>
    <?php
    echo 'test caractères accentués<br/>';
    $user = 'uuuuuu';
    $pass = 'pppppp';
    try {
         $dbh = new PDO('mysql:host=mysqlx-yy.perso;dbname=mabase;charset=utf8', $user, $pass);
         foreach($dbh->query('SELECT post_content FROM matable') as $row){
         print_r($row);
         }
    // dbh = null;
         }
    catch (PDOException $e){
    print "Erreur : ".$e->getMessage()."<br/>";
    die();
    }
    ?>
      </body>
    </html>
    Le problème est le même. Mon navigateur (FireFox) m'indique encodage : Unicode. Si je choisis Occidental, les caractères s'affichent bien .
    Ce qui est étrange , c'est que j'ai appliqué ce script à une table d'un blog sous Wordpress dont les tables sont dans la même base que pour mon appli mkframework et le comportement est le même mais l'affichage dans les pages WP est correct et le navigateur indique bien Unicode.
    Pour info, ceci est extrait de la page html retourné par WP
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    Au niveau des tables testées :
    pour la table WP : MyISAM utf8_general_ci
    pour la table de mon appli : MyISAM utf8_general_ci (j'ai essayé innoDB, pareil...)

    Si je visualise le contenu des tables via phpmyadmin, les caractères s'affichent normalement et mon navigateur indique bien encodage Unicode.Est ce la preuve que l'encodage interne dans la base est correct ?


    Voici un extrait de la commande phpinfo(). Cela peut-il être utile ?

    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
    mbstring
    Multibyte Support 	enabled
    Multibyte string engine 	libmbfl
    Multibyte (japanese) regex support 	enabled
    Multibyte regex (oniguruma) version 	4.4.4
    Multibyte regex (oniguruma) backtrack check 	On
     
    mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
     
    Directive	Local Value	Master Value
    mbstring.detect_order	no value	no value
    mbstring.encoding_translation	Off	Off
    mbstring.func_overload	0	0
    mbstring.http_input	pass	pass
    mbstring.http_output	pass	pass
    mbstring.internal_encoding	no value	no value
    mbstring.language	neutral	neutral
    mbstring.strict_detection	Off	Off
    mbstring.substitute_character	no value	no value

    Merci encore pour votre attention

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Il y a un peu d'incohérence:
    Vous dites: sur la page "simplle", vous écrivez en utf8, mais en mettant le navigateur en occidental (ISO-8859-1) là ça s'affiche bien ?

    Dans l'encodage il y a pas de magie:
    • soit on fait toute une chaine neutre avec une base de donnée "signée",
    • soit on met tout d'équerre sur le même charset (fichiers, os, drivers bdd...)


    Je ne sais pas quel OS vous utilisez, mais il faut bien vérifier:
    1. Le charset du serveur
    2. Le charset d'apache
    3. L'encodage de tous les fichiers (soit ascii, soit utf8)


    Question: en changeant le charset de votre navigateur, arrivez-vous à regler le problème ? si oui en mettant quel encodage ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je vais reformulé mon explication pour le premier point :
    le script de test dont j'ai fourni le code est un un fichier encodé utf8. La chaine retournée par "echo 'test caractères accentués<br/>';" s'affiche correctement mais les chaînes de retour de la requête SQL "foreach($dbh->query('SELECT post_content FROM matable') as $row)...." ne s'affichent pas correctement. le navigateur indique encodage Unicode sans plus de détail. C'est là que si force l'encodage Occidental (pas de détail non plus) le phénomène inverse se produit. La chaîne en dur devient incorrecte (ce qui est normal) mais "les retours SQL" s'affichent maintenant correctement. C'est cela qui me conduisait à poser la question sur les mécanismes de conversion entre la source (les tables configurées utf8) et le rendu final via le navigateur.

    Sur ma machine (distribution linux Magéia) tout fonctionne correctement. C'est le portage sur un serveur mutualisé d'OVH qui pose tous ces problèmes. Et comme c'est un serveur mutualisé, je n'ai accès à aucun paramètre de réglage....

    Lorsque vous évoquez le "charset du serveur" s'agit t'-il de l'OS ou du serveur de base de données? Je ne sais pas si je peux accéder à cette information.

    Bonne soirée et Merci

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Dans le cas de votre fichier "simple", on voit bien qu'il y a un soucis: vous mettez tout en utf8 et vous avez un soucis pour les élements provenant de la bdd

    Soit, les éléments en base sont en iso8859-1, soit il y a un soucis sur la machine

    Un essai à faire sur cette page "simple": se connecter en iso
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dbh = new PDO('mysql:host=mysqlx-yy.perso;dbname=mabase;charset=latin1', $user, $pass);


    Pour le paramétrage de l'OS je parlais de l'OS "web", dans votre cas le serveur mutualisé
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    J'ai essayé votre proposition mais j'obtiens la même chose.
    En faisant des recherches j'ai trouvé des cas similaires et la proposition suivante pour solutionner le problème. En désespoir de cause , j'ai donc modifié mon script de test en ajoutant $dbh->query("SET NAMES UTF8");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       $dbh = new PDO('mysql:host=mysqlx-yy.perso;dbname=mabase', $user, $pass);
       $dbh->query("SET NAMES UTF8"); 
       foreach($dbh->query('SELECT nom FROM matable') as $row){
    Et là ça marche. Que pensez vous de cette commande en terme de fiabilité et sécurité. Au niveau du framework, est il facile de l'intégrer ?

    Merci

  10. #10
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    De ce que j'avais lu

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dbh = new PDO('mysql:host=mysqlx-yy.perso;dbname=mabase;charset=utf8', $user, $pass);

    équivalait à

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       $dbh->query("SET NAMES UTF8");

    Pour ce qui est de l'inclure dans votre projet, vous pouvez ajouter une méthode excutant cette ligne dans un execute
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function switchUtf8(){
     $this->execute('SET NAMES UTF8');
    }

    Par exemple pour une classe model auteur:
    Code php : 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
    29
    30
    31
     
    <?php
    class model_auteur extends abstract_model{
     
    	protected $sClassRow='row_auteur';
     
    	protected $sTable='auteur';
    	protected $sConfig='xmlExple';
     
    	protected $tId=array('id');
     
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
     
    	public function switchUtf8(){
    		$this->execute('SET NAMES UTF8');
    	}
     
    	public function findById($uId){
    		$this->switchUtf8();
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
     
     
     
     
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  11. #11
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'ai reconstruit mon schéma de BDD et insérer des enregistrements non plus directement à partir de phpmyadmin mais à partir d'un script php. Via phpmyadmin, je vois les bien les caractères accentués.
    En ajoutant cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function switchUtf8(){
     $this->execute('SET NAMES UTF8');
    }
    et en l'appelant cela fonctionne dans mon application. Il me reste à tester si cette commande est persistante pour toute la session ou si il faut ou si il faut l'appeler avant chaque requête.

    Merci encore pour vos conseils.

    PS : je ne trouve pas comment marquer ce fil comme résolu

  12. #12
    Candidat au Club
    Homme Profil pro
    Ing R&D
    Inscrit en
    Mars 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ing R&D

    Informations forums :
    Inscription : Mars 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Pour "résolu", j'ai trouvé une fois le message envoyé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/12/2010, 19h51
  2. Problème de caractères accentués sur Windows
    Par Invité dans le forum Ada
    Réponses: 1
    Dernier message: 16/04/2010, 09h28
  3. Problème de caractère accentués sur Windows
    Par Invité dans le forum Ada
    Réponses: 7
    Dernier message: 25/11/2009, 16h47
  4. problème de caractères accentués (type êéè)
    Par zarbi61 dans le forum Général Python
    Réponses: 4
    Dernier message: 19/05/2006, 20h12
  5. [MiniPascal] Problème de caractères accentués
    Par Clandestino dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/10/2004, 13h12

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