Bonjour j'ai un probleme d'encodage utf-8 sur mon site php j'ai vérifié ma base de donnés elle est bien en utf-8 comme mon default.php savez-vous d'ou viens le probleme ? Merci d'avance !

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title><?php echo isset($title_for_layout)?$title_for_layout:'EmmyVat'; ?></title> 
    <link rel="stylesheet" href="/emmy/webroot/css/bootstrap.min.css">
    </head> 
    <body>       

<nav class="navbar navbar-inverse navbar-fixed-top" style="position:static">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">EmmyVat</a>
        </div>

        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
             <?php $pagesMenu = $this->request('Pages','getMenu');?> 
                <?php foreach($pagesMenu as $p): ?>
                    <li><a href="<?php echo BASE_URL.'/pages/view/'.$p->id; ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a></li> 
                <?php endforeach; ?>
                <li><a href="<?php echo Router::url('posts/index'); ?>">Actualités</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

        <div class="container" style="padding-top:60px;">
            <?php echo $content_for_layout; ?>
        </div>

    </body> 
    <script type="text/javascript" src="/emmy/webroot/js/jquery.min.js"></script>
</html>

18 réponses


brokleen
Réponse acceptée

Créer un fichier html rentre ca et dis moi si l'encodage fonctionne correctement.

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre de la page</title>
</head>
<body>
    '"'éè@&
</body>
</html>

Les encodages sont chiants

Est-ce que ta page et bien en utf8 ? (non pas le contenu, je parle de la page)
Un exemple de ce que je te dis sous notepad++ : http://www.nosyweb.fr/images/stories/notepad-utf-8.png

De même pour la base de données, peut-être elle est en utf8, mais est-ce que la connexion est les données qui y rentrent le sont également ?

Peux-tu copier le code de la connexion à la bdd.

oui tout est en utf-8
default.php :

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title><?php echo isset($title_for_layout)?$title_for_layout:'EmmyVat'; ?></title> 
    <link rel="stylesheet" href="/emmy/webroot/css/bootstrap.min.css">
    </head> 
    <body>       

<nav class="navbar navbar-inverse navbar-fixed-top" style="position:static">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">EmmyVat</a>
        </div>

        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
             <?php $pagesMenu = $this->request('Pages','getMenu');?> 
                <?php foreach($pagesMenu as $p): ?>
                    <li><a href="<?php echo BASE_URL.'/pages/view/'.$p->id; ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a></li> 
                <?php endforeach; ?>
                <li><a href="<?php echo Router::url('posts/index'); ?>">Actualités</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

        <div class="container" style="padding-top:60px;">
            <?php echo $content_for_layout; ?>
        </div>

    </body> 
    <script type="text/javascript" src="/emmy/webroot/js/jquery.min.js"></script>
</html>

Model .php partie connection a la base de données :

public function __construct(){
        // je me conencte à la base
        if($this->table === false){
            $this->table = strtolower(get_class($this)).'s';
        }
        $conf = Conf::$databases[$this->conf];
        if(isset(Model::$connections[$this->conf])){
            $this->db = Model::$connections[$this->conf];
            return true;
    }
        try{
            $pdo = new PDO(
                'mysql:host='.$conf['host'].';dbname='.$conf['database'].';',
                $conf['login'],
                $conf['password'], 
                array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
                );
            $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
            Model::$connections[$this->conf] = $pdo;
            $this->db = $pdo;
        }catch(PDOException $e){
            if(Conf::$debug >= 1){
                die($e->getMessage());
            }else{
                die('Impossible de se connecter à la basse de donnée');
            }
        }

        //j'initialise quelques variables

    }

Salut, essaie ce doctype :

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
</head>

Peux tu copier coller un bout de texte non encodé.

Edit: test les caractères spéciaux en dur, et depuis ta base pour déjà savoir si cela vient de la base ou d'autres choses.

maintenant ca marche mais pas quand je suis dans pages/view ... Et quand je fais lire la suite d'un de mes article dans la barre de navigation il ne me met pas les accents ...

Edit: test les caractères spéciaux en dur, et depuis ta base pour déjà savoir si cela vient de la base ou d'autres choses.

j'ai tapé ca dans ma base : &é"'(-è_çà)=$ù^!:;, et sur mon site il m'a mis ca : &é"'(-è_çà )=$ù^!:;,

et en bas de ma page j'ai mis un truc pour voir en combien de temps elle a été générée et les accents ne se mettent pas ... et ca a rien avoir avec ma base ca ...

elle est encodée comment ta base ? Tes Tables ?

en utf8-general_ci

Bon ba c'est un problème d'encodage des fichiers, il faut vérifier que tes fichiers soient en utf8 sans bom.

comment vérifier ?

Tu utilises quel soft ?

sublime text 2

c bon toutes mes pages sont encodés en utf 8 sans bom mais ca change rien ...

je n arrive pas a l ouvrir par l intermedire de mon serveur ...

c bon j ai trouver le probleme c etait dans mon router.php avec le catcher ...