Bien le coucou,

J'ai une petite question. Il m'arrive des fois (comme maintenant tiens) d'avoir un soucis avec le Charset. Il est en utf-8 sur toutes les pages ,SAUF une qui est en latin1 ou 9 je sais plus -_-

Vous avez une idée de pourquoi du comment ?

ça c'est l'entête de mon layout

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=<strong>utf-8</strong>"/>
    <title><?php echo $title_for_layout; ?></title>
    <meta name="copyright" content="http:// *******.com" /> 
    <meta name="author" content=" *******.com" /> 
    <meta name="language" content="fr" />
    <?php

ça c'est le code qui mène à la page qui pose problème

//Fonction de création d'un story
    public function liste(){
        $this->LoadModel('Stories');
        $this->LoadModel('Categories');
        $this->LoadModel('StoryContributeurs');
        $this->loadModel('Temporaires');
        //Récupération de l'ID de l'utilisateur
        $user_id = $this->Auth->user('id');
        //Récupération de toutes les histoires
        $listeDesStories = $this->Stories->find('all');
        //Affinage de la recherche des histoires en ne prenant que celles qui sont écrites
        //par l'utilisateur qui est connecté.
        $listeStoriesAuteur = $this->Stories->find('all',array('conditions' => array('stories.u_create' => $user_id)));
        //Recherche des libellés de catégories
        $listeStoriesAuteurExiste = $this->Stories->query(
                'SELECT * 
                FROM stories, categories
                WHERE stories.id_category = categories.id
                AND stories.u_create='.$user_id
                );

        //Récupération de toutes les valeurs de la table Contributeur
        $listeDesContributeursParHistoire = $this->StoryContributeurs->find('all');
        //Affinage de la recherche des histoires en ne prenant que celles où l'utilisateur
        //connecté est enregistré.
        $listeHistoireContributeurUserConnecte = $this->StoryContributeurs->find('all',array('conditions' => array('StoryContributeurs.id_user' => $user_id)));
        //Recherche des infos du l'histoire en fonction de l'ID de l'histoire.
        $listeHistoireContributeurUserConnecteUserExiste = $this->Stories->query(
                'SELECT * 
                FROM stories, story_contributeurs, categories
                WHERE stories.id = story_contributeurs.id_story
                AND stories.id_category = categories.id
                AND story_contributeurs.id_user='.$listeHistoireContributeurUserConnecte[0]'StoryContributeurs']'id_user']
                );
        $listeHistoireEnCoursDedition = $this->Temporaires->find('all');
        //On transmet toutes les variables à la vue
        $this->set('listeHistoireEnCoursDedition',$listeHistoireEnCoursDedition);
        $this->set('listeStoriesAuteurExiste',$listeStoriesAuteurExiste);
        $this->set('user_id',$user_id);
        $this->set('listeDesStories',$listeDesStories);
        $this->set('listeDesCategories',$listeDesCategories);
        $this->set('listeHistoireContributeurUserConnecteUserExiste',$listeHistoireContributeurUserConnecteUserExiste);
    }

ça c'est la page en question

<div class="conteneur">
  <ol class="breadcrumb">
    <li><a href="#">Accueil</a></li>
    <li class="active">Liste des histoires</li>
  </ol>
  <h4>Gestion de vos histoires</h4>
  <p>Vous trouverez ci-dessous l'ensemble des oeuvres auxquelles vous participez ou que vous avez créé. Lorsqu'une oeuvre affiche un état "<b>En cours</b>", vous avez la possibilité de participer à sa rédaction. Lorsqu'elle passe en statut "<b>Terminée</b>" vous ne pouvez que l'éditer en format PDF. L'oeuvre
    passera automatiquement en statut terminée au bout de <b>15 jours</b>.</p>
  <!-- Tableau des oeuvres de l'utilisateur -->
    <div class="row">
      <h4>Mes oeuvres</h4>
      <table class="table table-hover"> 
        <thead> <!-- En-tête du tableau -->
          <tr>
            <th>Nom de votre livre</th>
            <th>Genre du livre</th>
            <th>Etat</th>
            <th>Actions</th>
            <th>Dernière édition</th>
            <th>Etat</th>
          </tr>
        </thead>
        <tbody> <!-- Corps du tableau -->
        <?php foreach ($listeStoriesAuteurExiste as $storyAuthor): ?>
          <tr id="<?php echo $storyAuthor'stories']'id'];?>">
             <td><?php echo $storyAuthor'stories']'title'];?></td>
             <td><?php echo $storyAuthor'categories']'libelle'];?></td>
              <td class="img-align">
                <?php if (date('Y-m-d H:i:s') < $storyAuthor'stories']'d_expires']): ?>
                    En cours
                <?php else :?>
                    Rédaction terminée
                <?php endif;?>
              </td>
              <td>
                <?php if ($listeHistoireEnCoursDedition):?>
                    <?php foreach ($listeHistoireEnCoursDedition as $listeEntree):?>
                        <?php if ($listeEntree'Temporaires']'id_story'] != $storyAuthor'stories']'id']):?>
                            <?php echo $this->Html->image("icons/add_message.png",array('alt'=>'Add Message','url' => array('controller' => 'story', 'action' => 'addmessage', $storyAuthor'stories']'id'])));?>
                        <?php else:?>
                            <?php echo $this->Html->image("icons/edition_en_cours.png");?>
                        <?php endif;?>
                    <?php endforeach;?>
                <?php else:?>
                    <?php echo $this->Html->image("icons/add_message.png",array('alt'=>'Add Message','url' => array('controller' => 'story', 'action' => 'addmessage', $storyAuthor'stories']'id'])));?>
                <?php endif;?>
              </td>
              <td>09 12 2013</td>
              <td>
                <?php if ($listeHistoireEnCoursDedition):?>
                    <?php foreach ($listeHistoireEnCoursDedition as $listeEntree):?>
                        <?php if ($listeEntree'Temporaires']'id_story'] != $storyAuthor'stories']'id']):?>
                            <?php echo "Vous pouvez écrire un mot !";?>
                        <?php else:?>
                            <?php echo "En cours d'édition";?>
                        <?php endif;?>
                    <?php endforeach;?>
                <?php else:?>
                    <?php echo "Vous pouvez écrire un mot !";?>
                <?php endif;?>
              </td>
          </tr>
        <?php endforeach ?>
        </tbody>
      </table>
    </div>
  <!-- Tableau des oeuvres où l'utilisateur est contributeur -->
    <div class="row">
      <h4>Mes oeuvres</h4>
      <table class="table table-hover"> 
        <thead> <!-- En-tête du tableau -->
          <tr>
            <th>Nom de votre livre</th>
            <th>Genre du livre</th>
            <th>Etat</th>
            <th>Actions</th>
            <th>Dernière édition</th>
            <th>Etat</th>
          </tr>
        </thead>
        <tbody> <!-- Corps du tableau -->
        <?php foreach ($listeHistoireContributeurUserConnecteUserExiste as $story): ?>
          <tr id="<?php echo $story'stories']'id'];?>">
             <td><?php echo $story'stories']'title'];?></td>
             <td><?php echo $story'categories']'libelle'];?></td>
              <td class="img-align">
                <?php if (date('Y-m-d H:i:s') < $story'stories']'d_expires']): ?>
                    En cours
                <?php else :?>
                    Rédaction terminée
                <?php endif;?>
              </td>
              <td>
                <?php if ($listeHistoireEnCoursDedition):?>
                    <?php foreach ($listeHistoireEnCoursDedition as $listeEntree):?>
                        <?php if ($listeEntree'Temporaires']'id_story'] != $story'stories']'id']):?>
                            <?php echo $this->Html->image("icons/add_message.png",array('alt'=>'Add Message','url' => array('controller' => 'story', 'action' => 'addmessage', $story'stories']'id'])));?>
                        <?php else:?>
                            <?php echo $this->Html->image("icons/edition_en_cours.png");?>
                        <?php endif;?>
                    <?php endforeach;?>
                <?php else:?>
                    <?php echo $this->Html->image("icons/add_message.png",array('alt'=>'Add Message','url' => array('controller' => 'story', 'action' => 'addmessage', $story'stories']'id'])));?>
                <?php endif;?>
              </td>
              <td>09 12 2013</td>
              <td>
                <?php if ($listeHistoireEnCoursDedition):?>
                    <?php foreach ($listeHistoireEnCoursDedition as $listeEntree):?>
                        <?php if ($listeEntree'Temporaires']'id_story'] != $story'stories']'id']):?>
                            <?php echo "Vous pouvez écrire un mot !";?>
                        <?php else:?>
                            <?php echo "En cours d'édition";?>
                        <?php endif;?>
                    <?php endforeach;?>
                <?php else:?>
                    <?php echo "Vous pouvez écrire un mot !";?>
                <?php endif;?>
              </td>
          </tr>
        <?php endforeach ?>
        </tbody>
      </table>
    </div>
</div>

et ça c'est une page qui marche bien ^^

<div class="account">
    <div class="header-account"></div>
    <div class="header-body">
        <div class="row">
            <div class="icon-addresse"></div>
            <div class="text-titre-account"><a href="../addresse/show">Modifier mes adresses</a></div>
        </div>
        <div class="row">
            <div class="icon-infos"></div>
            <div class="text-titre-account"><a href="../users/edit">Modifier mes infos personnelles</a></div>
        </div>
        <div class="row">
            <div class="icon-infos"></div>
            <div class="text-titre-account"><a href="../story/liste">Gestion des histééires</a></div>
        </div>
    </div>
    <div class="header-footer"></div>
</div>

Merci d'avance pour vos idées :)

8 réponses


christophe4427
Auteur
Réponse acceptée

Aller bingo !

Alors ça vient de là, je le voyais pas c'était sous mon header ^^

Erreur:

Notice (8): Undefined variable: listeDesCategories [APP\Controller\StoryController.php, line 101]

code à enlever :

$this->set('listeDesCategories',$listeDesCategories);

Bon bah voilà je le saurais la prochaine fois, ou j'arrêterai de l'oublier XD
Désolé de vous avoir fait perdre du temps ! Et merci à vous !

Bah regarde :

  • la page de ta vu si elle est bien encodé en utf8 sans bom
  • regarde si la table que tu demande a bien un encodage utf8

Bonne continuation.

Chalut,
Merki de ta réponse, alors du coup, oui la table enfin même la base entière est en UTF8 par contre UTF-8 sans bom tu fais ça comment ? J'ai vu un exemple sur Notepad mais heu là je vois pas trop :s

bah sur ta page model/controlle/vu tu dois mettre utf8 sans bom (ou utf8 tout simplement)

-> encodage -> utf8 sans bom (sur notepad++
et tu réupload tes fichiers sur ton serveur. (tentionque ça te fasse pas des caractère non trad. )
La valeur par défault est ANSI

Dans ta base de données, il faut vérifier que l'encodage de ta base de données soient en UTF-8-general-ci ce que tu as déjà fait, mais attention il faut aussi que chaque champs de ta base de données soit encodée en utf-8-general-ci.
Le problème vient peut être de là ?

Juste une question est-ce que le code écrit en dur, tel que "Rédaction terminée" s'affiche correctement dans ta page ?
Si oui, c'est que ça vient de ta base de donnée, sinon c'est que ça vient de l'encodage de ta page (qui a l'air bon à priori sans les balises strong ?) ou de l'encodage du fichier.

Merci pour vos réponses ^^
Alors Piverte > J'ai regardé et toutes mes tables, tous mes champs sont en UTF8-CI

Pour toi Coloo mes fichiers sont en UTF-8 et j'ai look l'encodage je peux choisir UTF8-BOM (je le sais pas je le laisse tel quel je suppose ?)

Tu n'as pas répondu à mes questions :)
"Juste une question est-ce que le code écrit en dur, tel que "Rédaction terminée" s'affiche correctement dans ta page ?
Si oui, c'est que ça vient de ta base de donnée, sinon c'est que ça vient de l'encodage de ta page (qui a l'air bon à priori sans les balises strong ?) ou de l'encodage du fichier."

sinon pour l'encodage des fichiers, coloo a raison, il faut sélectioner UTF8-SANS BOM

Chalut !
Excuses moi, je crois que mon cerveau a zappé ta question, je ne l'avais pas vu :$
Donc dans l'absolu j'ai regardé le fichier en dur, et du coup oui ça s'affiche correctement, le caractère n'est pas modifié. J'ai look du coup l'encodage du fichier et bah il est déjà en UTF8- SANS BOM :s

Après j'ai déjà vu cette erreur, et ça venait du fait qu'un champ, ou qu'une partie du code n'était pas bonne à un endroit, ça ne provoquait pas d'erreur de plantage réel, mais juste une erreur de caractère spéciaux -_-