Page 1 sur 1

Récupération en post d'une chaine avec accent

Message Publié : 05 Décembre 2013, 17:07
par julien@quai13
Grosse prise de tête avec Jé aujourd'hui sur le passage d'une chaîne comportant des accents.

Ceci : $region = $this->ns->ifPost('string', 'region');
et ceci : $region = $request->post('string', 'region');

ne fonctionnait pas pour passer la variable dans le model. J'en suis réduis à faire $region = $_POST['region'];

Or quand je regarde comment le formulaire d'inscription/modification d'un profil est géré c'est bien des $ns->ifPost qui sont utilisés et il n'y a pas de soucis avec les accents. J'ai regardé dans le module.ini j'ai bien le module fonctions en dépendance. Les 2 fonctions sont pourtant super simples :

CONTROLLER
Code : Tout sélectionner
public function sttAction($request, $params = null)
{
    $auth = $this->users->needAuth();
    if (count($_POST)) {
        // $region = $this->ns->ifPost('string', 'region');
        // $region = $request->post('string', 'region');
        // obligation de passer par $_POST à cause des accents
        $region = strip_tags($_POST['region']);
        $cgu = $request->post('boolean', 'cgu');
        if ($region && $cgu) {
            $region = $this->dreal->getRegions($region);
        }
    }
}


MODEL
Code : Tout sélectionner
public function getRegions($region = null)
{
    $sql = 'SELECT *
        FROM `andco_regions` ';
    if ($region) {
        $sql .= 'WHERE `region` = \'' . $this->db->escape_string($region) . '\';';
    }
    $stmt = $this->db->query($sql);
    if ($region) {
        $result = $this->db->fetch_assoc($stmt);
    } else {
        $result = array();
        while ($res = $this->db->fetch_assoc($stmt)) {
            $result[] = $res;
        }
    }
    return $result;
}


C'est quand même super basique et pourtant. Si je passe par les fonctions natives de Clementin $result ne renvoie rien. Evidemment le varchar de la bdd est en utf8_general_ci.

Re: Récupération en post d'une chaine avec accent

Message Publié : 18 Décembre 2013, 21:10
par pa-de-solminihac
Premier truc qui me taraude : utf8_general_ci c'est une collation, ce n'est pas un encodage.

Tu peux me poster le résultat d'un :
Code : Tout sélectionner
SHOW CREATE TABLE table_incriminee;


Sinon, quelques pistes et tests à effectuer :
- vider le dossier app/share et lancer l'installeur pour réinstaller les modules share, on sait jamais, des fois qu'ils aient été modifiés
- vérifier que le .htaccess contient bien : AddDefaultCharset UTF-8
- contrôler que le fichier de config ne demande pas un encodage différent : fichier config.ini, section [clementine_global], clés php_encoding, sql_encoding, html_encoding (utf8 par défaut)

Re: Récupération en post d'une chaine avec accent

Message Publié : 28 Avril 2014, 14:19
par julien@quai13
Je fais suite à ce post car j'ai un problème similaire mais sur des données provenant d'un formulaire.

Pour une chaîne avec accent si je la récupère avec $request->post j'aurais de l'ASCII mais si je la récupère avec $_POST j'aurais de l'UTF8 (ce que je m'attendais à avoir dans tous les cas).
Pour une chaîne sans accent, j'aurais forcément de l'ASCII peut importe la récupération.

Mes fichiers sont bien encodés en UTF8 sans BOM, Chrome détecte bien l'UTF8, et ajouter un accept-charset="utf-8" dans la balise <form> ne change rien. En cherchant un peu j'ai appris que l'ASCII était un sous-ensemble d'UTF8 donc impossible de convertir ma chaîne de caractère après l'avoir récupéré.

Seule méthode actuellement trouvé c'est de ne pas passer par le wrapper $request->post() ce qui est un peu dommage.

Re: Récupération en post d'une chaine avec accent

Message Publié : 02 Mai 2014, 19:34
par pa-de-solminihac
Je fais le test en partant sur une installation neuve de Clementine et je ne rencontre aucun problème.

Il doit y avoir quelque chose qui a sauté dans ton installation. As-tu fait les vérifications que je t'indiquais lors de la réponse précédente ?

Essaye également sur une install fraîche, et dis moi si tu rencontres aussi le problème... on sait jamais, c'est peut-être moi qui n'ai pas compris ta question !