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

PHP & Base de données Discussion :

UTF8 quand tu nous tiens


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Septembre 2012
    Messages : 15
    Par défaut UTF8 quand tu nous tiens
    Bonjour à tous

    Bon je doit pas être le premier ni le dernier à avoir ce problème !

    J'ai un site en UTF8, ma base en UTF8, les tables en UTF8 ect.. mais rien à faire, dans ma base de données j'ai des é a la place des é etc...alors que normalement je devrais bien avoir un é, à etc...

    Avant que vous me demandez j'ai bien ceci dans mon header:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    Connexion base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $this->query("SET NAMES 'utf8'", $this->link_id);
              $this->query("SET CHARACTER SET 'utf8'", $this->link_id);
    		  $this->query("SET CHARACTER_SET_CONNECTION=utf8", $this->link_id);
    Dans mon htaccess:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddDefaultCharset utf-8

    Je ne voie vraiment plus d'ou vient le problème là , si vous avez une idée je suis super preneur !

    D'avance merci

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    je suis pas un pro sur l'encodage, mais il me semble que tu as des caractères html à la place. Utilises html_entity_decode avant de mettre en base de données.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Septembre 2012
    Messages : 15
    Par défaut
    Bonjour Fench

    J'ai essayer direct ta solution mais non toujours pas hélas

    Je prend cette phrase comme exemple: J'ai testé

    Avant le html_entity_decode cela me donner ceci en base :

    Et maintenant avec le html_entity_decode sa me donne:

    Le é et même barrer

    Franchement je désespère, j'arrive pas à trouver le problème !

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Comme je te l'ai dis, je suis pas trop doué alors je vais essayer des pistes:
    Tu as dans ta ligne du code Html comme &eacute; et du code iso comme &#039;

    Ce que je ne comprends pas c'est que le ' de j'ai correspond à #130;

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Septembre 2012
    Messages : 15
    Par défaut
    Re bonjour !

    J'ai de la news, depuis un moment je me demande pas si sa vient pas des filtres en faite...

    Filtres qui sont tirés par un CMS en faite

    Avant l'insertion dans la base j'ai ce filtre function filtre():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $string = filter_var($string, FILTER_SANITIZE_STRING);
          $string = trim($string);
          $string = stripslashes($string);
          $string = strip_tags($string);
          $string = str_replace(array('‘', '’', '“', '”'), array("'", "'", '"', '"'), $string);
    J'ai aussi une class final donc je met le code entier:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
      final class Filter
      {
          public $get = array();
          public $post = array();
          public $cookie = array();
          public $files = array();
          public $server = array();
     
     
          /**
           * Filter::__construct()
           * 
           * @return
           */
          public function __construct()
          {
              $_GET = $this->clean($_GET);
              $_POST = $this->clean($_POST);
              $_COOKIE = $this->clean($_COOKIE);
              $_FILES = $this->clean($_FILES);
              $_SERVER = $this->clean($_SERVER);
     
              $this->get = $_GET;
              $this->post = $_POST;
              $this->cookie = $_COOKIE;
              $this->files = $_FILES;
              $this->server = $_SERVER;
          }
     
          /**
           * Filter::clean()
           * 
           * @param mixed $data
           * @return
           */
          public function clean($data)
          {
              if (is_array($data)) {
                  foreach ($data as $key => $value) {
                      unset($data[$key]);
     
                      $data[$this->clean($key)] = $this->clean($value);
                  }
              } else
                  $data = htmlentities($data, ENT_QUOTES, 'UTF-8');
     
              return $data;
          }
      }
    Alors je vient de faire ceci en faite, enlever ma function filtre de ma variable et aussi faire un simple return $data dans la class final comme ceci:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
      final class Filter
      {
          public $get = array();
          public $post = array();
          public $cookie = array();
          public $files = array();
          public $server = array();
     
     
          /**
           * Filter::__construct()
           * 
           * @return
           */
          public function __construct()
          {
              $_GET = $this->clean($_GET);
              $_POST = $this->clean($_POST);
              $_COOKIE = $this->clean($_COOKIE);
              $_FILES = $this->clean($_FILES);
              $_SERVER = $this->clean($_SERVER);
     
              $this->get = $_GET;
              $this->post = $_POST;
              $this->cookie = $_COOKIE;
              $this->files = $_FILES;
              $this->server = $_SERVER;
          }
     
          /**
           * Filter::clean()
           * 
           * @param mixed $data
           * @return
           */
          public function clean($data)
          {
     
     
              return $data;
          }
      }
    Et là j'ai bien "j'ai testé" en base, mais bon d'ou vient le problème docteur ?

    Merci pour votre aide

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par zoulou172 Voir le message
    Et là j'ai bien "j'ai testé" en base, mais bon d'ou vient le problème docteur ?
    Il vient du fait que ton CMS fait un peu n'importe quoi avec les données reçues. Il est parano et du coup crée plus de problèmes qu'il n'en résout :
    Ta classe filtre passe tout à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = htmlentities($data, ENT_QUOTES, 'UTF-8');
    Ensuite, il y a un autre problème beaucoup plus sérieux, c'est que ton CMS casse les chaînes textes :
    Les fonctions str_* ne sont pas compatibles avec UTF-8. La seule qui le soit sans risque c'est trim()Alors quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = str_replace(array('‘', '’', '“', '”'), array("'", "'", '"', '"'), $string);
    Tu as une probabilité non négligeable de corrompre ta chaine.

    Change de CMS.

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par zoulou172 Voir le message
    je ne voie vraiment plus d'ou vient le problème là , si vous avez une idée je suis super preneur !
    Trace ton code d'insertion en base et retire le htmlentities() qui doit sévir.
    La base de données ne remplace rien d'elle-même

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

Discussions similaires

  1. [AJAX] Ajax quand tu nous tiens
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/08/2007, 21h38
  2. [FRAME] Quand tu nous tiens
    Par hisy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/07/2006, 08h27
  3. [Sessions] Session quand tu nous tiens
    Par arti2004 dans le forum Langage
    Réponses: 10
    Dernier message: 27/05/2006, 19h19
  4. Regex quand tu nous tiens !!!
    Par calimero642 dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 14h33
  5. [object HTMLSelectElement] IE quand tu nous tiens
    Par NeHuS dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/03/2006, 08h26

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