Bonjour amis de Grafikart.fr

Voici ma fonction voir dans mon post controller

public function voir($id, $idC=null){
            $this->loadModel('Comment');
            if($this->request->is('post')){
                $this->request->data = Sanitize::clean($this->request->data);
                if($this->Comment->save($this->request->data)){
                    $this->Session->setFlash("Votre commentaire a bien été enregistré !", "notif");  
                    $this->request->data'Comment']'contenu'] = "";
                }else{
                    $this->Session->setFlash('Commentaire non envoyé !', "notif", array('type' => 'error'));
                }
            }elseif($this->request->is('put')){
                $this->request->data = Sanitize::clean($this->request->data);
                if($this->Comment->save(array(
                    'id' => $this->request->data'Comment']'id'],
                    'date_edition' => date('Y-m-d H:i:s'),
                    'auteur_edition' => $this->Auth->user('username'),
                    'contenu' => $this->request->data'Comment']'contenu']
                ))){
                $this->Session->setFlash("Votre commentaire a bien été edité !", "notif");  
                $this->redirect('/posts/voir/'.$id.'');
                }else{
                    $this->Session->setFlash('Commentaire non envoyé !', "notif", array('type' => 'error'));
                }
            }
            if ($this->request->is('get')){
                $this->Post->Comment->id = $idC;
                $this->request->data = $this->Comment->read();
            }
        $this->layout = 'default';
        $b = $this->Post->find('first', array('conditions' => array(
            'Post.id' => $id), 
            'contain' => array(
                'Comment' => array(
                    'User' => array(
                        'Avatar')), 
                'Category')
        ));
        $this->set('article', $b);
        }

Quand je veux editer un commentaire le commentaire apparait dans mon textarea avec plein de caractères spéciaux à la places des accents et des apostrophes, c'est à cause de ma méthode sanitise, pourtant mes articles s'affiche bien sans problèmes d'accents sur ma page, ce n'est que dans mon textarea pendant l'édition.

Vous savez comment je peux contourner ça ?

Merci à vous d'avance

8 réponses


Salut Tapesec,
Pour ma part, j'ai utilisé sanitize dans mon model Comment.php dans une fonction beforeSave comme ceci :

public function beforeSave(){
        App::uses('Sanitize','Utility');
        $this->data'Comment']'content'] = Sanitize::html($this->data'Comment']'content'], array('remove' => true));
        return true;
    }

Et cela fonctionne bien.

tapesec
Auteur

Ah oui tiens toi tu utilises la methode html et moi clean c'est pas pareil, ta méthode html est peut être moins "violente" que clean

Salut, j'ai mis la méthode html car je pense que cela suffit comme level de sécurité. Surtout que sur mon site, seul les membres peuvent poster un commentaire.
Si tu veux utiliser la méthode clean essaye d'ajouter comme option :

$this->request->data = Sanitize::clean($this->request->data, array('encode' => false,'remove_html' => false));
tapesec
Auteur

En fait apres avoir parcouru google je suis tombé sur un post qui explique qu'il suffit largement d'utiliser sanitise dans la vue directement. J'ai observé ma base de donnée et j'ai remarqué que en utilisant sanitise::clean ou même sanitise::html les données sauvegardés dans ma bdd avaient déjà les accents transphormés en caractères spéciaux et c'est pourquoi dans mes taxtarea ca m'affichait les accents bizares.

J'ai donc enlevé la méthode sanitise avant sauvegarde et je l'utilise juste dans ma vue pour prévenir des failles xss. pour les risques d'injection sql il parrait toujours dans le meme article que cakephp traite déjà ces problèmes.

En tous cas merci mon problème est résolu.
Dailleurs je remarque que tu viens toujours me répondre pour m'aider c'est gentil Zenkiai et comme tu as contribué à la réalisation de mon blog je te donne son adresse : FrienD'Blog, je l'ai pas encore référencé je règle quelques petits détail et je vais commencer à écrire quelques articles mais le gros est fait merci :)

Je viendrais avec plaisir sur ton site lire tes articles et m'inscrire.
J'y suis déjà allé voir une fois et j'avais trouvé ton design sympa.

tapesec
Auteur

Sympa je viens de voir que tu t'es inscris c'est gentil, tu dis que tu as un site je viendrai bien y jeter un coup d'oeuil si j'avais l'adresse ... :)

Je suis en train de créer un site en effet, mais c'est long à faire ces petites bêtes. j'essaye de finaliser au moins la partie blog pour donner mon adresse. Pour l'instant je l'ai mis sur un nom de domaine qui me sert pour tous mes essais, mes tests.
Je viens d'acheter le nom de domaine final, une fois que j'aurais finalisé ce blog,je transférerais mes fichiers sur le bon site.
Mais je peux déjà te donner l'adresse où pour l'instant seul cakePHP est installé Pistard.fr.
Une fois que je l'aurais mis à jour, je te mettrais au courant.

PS: ton article sur Markit Up m'a servi d'ailleurs sur ton site, je ne l'avais pas fait fonctionner ainsi sur mon site, et je trouve que ta méthode est plus propre, plus dans l'esprit d'un MVC que celle que j'avais utilisée. Tu as déjà fait un heureux :)

tapesec
Auteur

ah bah j'en suis heureux :) tiens moi au courant quand ton site est terminé j'irai voir ça.