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

Langage PHP Discussion :

PHP en CLI : accents non pris en compte


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut PHP en CLI : accents non pris en compte
    Bonjour,

    j'écris actuellement un p'tit script me permettant de calculer la densité des mots dans un texte. Ce texte est une chaine concaténant tous les titres d'un article qui sont extraits d'une base MySQL. Les mots ainsi que leur occurence sont ensuite insérés dans une table.

    Afin de pouvoir automatiser le tout en tâche cron, je teste et exécute le script en ligne de commande.

    Le problème est que, une fois le script exécuté, je yeute la table pour voir le résultat, et je constate que les mots contenants des accents sont tronqués, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    marché => march
    trophées => troph
    J'ai donc exécuter le script via un navigateur, et là les accents sont parfaitement pris en compte.
    J'ajoute que les titres et la base sont en UTF8.

    Quelqu'un aurait une piste sur laquelle me mettre ?
    merci d'avance

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    quel encodage utilise ton fichier script ?

    Si c'est de l'utf8 il faut respecter toutes ces conditions :
    http://php.developpez.com/faq/index....ql#mysql-utf-8


    Et peut on voir ton script ?
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    quel encodage utilise ton fichier script ?

    Si c'est de l'utf8 il faut respecter toutes ces conditions :
    http://php.developpez.com/faq/index....ql#mysql-utf-8


    Et peut on voir ton script ?
    Hello,

    le projet Netbeans est bien en UTF-8 donc le script aussi.
    Je code sous Zend Framework. Au niveau des conditions à respecter, j'ai dans mon bootstrap la ligne suivante :

    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
     
    /**
     * Configuration Db
     */
        public static function initMySQL()
        {
            $db = Zend_Db::factory('Pdo_Mysql', array(
                'host' => 'localhost',
                'username' => 'root',
                'password' => '',
                'dbname' => 'monsite'
            ));
     
            Zend_Db_Table_Abstract::setDefaultAdapter($db);
     
            $dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter();
            $dbAdapter->query('SET NAMES UTF8');
     
            Zend_Registry::set('dbAdapter', $dbAdapter);
        }
    Initialisé dans un fichier init.php par l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Bootstrap::initMySQL();
    voici le script, en tout cas les fonctions principales, j'appelle titleFeed() :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    public function titleFeed()
        {
            /*
             * Assemblage des titres
             */
            $results = $this->getTitles();
     
            $titres = '';
     
            foreach ($results as $article){
                $titres.= $article->titre . ' ';
            }
     
            // Scan des occurences
            $scan = $this->getOccurences($titres);
            $occurencies = $scan['wordcount'];
     
            /*
             * Insertion de chaque mot dans la base
             */
            $table_titre_key = new Model_TitreKeys();
     
            foreach ($occurencies as $word => $count){
     
                if ($count < 10)
                    continue;
     
                $data = array (
                    'word' => $word,
                    'count' => $count
                );
                $table_titre_key->insert($data);
                echo $word . " inséré \n";
            }
     
    /**
     * Scan les occurrences
     */
    public function getOccurences($in)
        {
            /**
             * Mots à effacer des titres
             */
            $in = $this->_filtreWords($in);
     
            $tok = strtok($in, " \n");
     
            $toks = Array();
     
            while($tok !== false){
                if (trim($tok)){
                    $toks[] = trim($tok);
                }
                $tok = strtok(" \n");
            }
     
            $totalcount = count($toks);
     
            //wordcount - 1 word
            $wordcount = Array();
            foreach($toks AS $word){
                $word = strtolower($word);
                if (!isset($wordcount[$word])){
                    $wordcount[$word]=1;
                } else {
                    $wordcount[$word]++;
                }
            }
     
            //wordcount = 2, 3 & 4 words
            $toks2 = Array(); // Contient les groupes de 2 mots
            $toks3 = Array(); // de 3 mots
            $toks4 = Array(); // de 4 mots
     
            for($i = 0; $i < count($toks); $i++){
                if (isset($toks[$i]) && isset($toks[$i+1]) && trim($toks[$i]) && trim($toks[$i+1])){
                    $toks2[] = strtolower(trim($toks[$i])." ".trim($toks[$i+1]));
                }
                if (isset($toks[$i]) && isset($toks[$i+1]) && isset($toks[$i+2]) && trim($toks[$i]) && trim($toks[$i+1]) && trim($toks[$i+2])){
                    $toks3[] = strtolower(trim($toks[$i])." ".trim($toks[$i+1])." ".trim($toks[$i+2]));
                }
                if (isset($toks[$i]) && isset($toks[$i+1]) && isset($toks[$i+2]) && isset($toks[$i+3]) && trim($toks[$i]) && trim($toks[$i+1]) && trim($toks[$i+2]) && trim($toks[$i+3])){
                    $toks4[] = strtolower(trim($toks[$i])." ".trim($toks[$i+1])." ".trim($toks[$i+2])." ".trim($toks[$i+3]));
                }
            }
            foreach($toks2 AS $phrase){
                if (!isset($wordcount[$phrase])){
                    $wordcount[$phrase]=1;
                }
                else {
                    $wordcount[$phrase]++;
                }
            }
            foreach($toks3 AS $phrase){
                if (!isset($wordcount[$phrase])){
                    $wordcount[$phrase]=1;
                }
                else {
                    $wordcount[$phrase]++;
                }
            }
            foreach($toks4 AS $phrase){
                if (!isset($wordcount[$phrase])){
                    $wordcount[$phrase]=1;
                }
                else {
                    $wordcount[$phrase]++;
                }
            }
     
            $densities = Array();
            foreach($wordcount AS $word => $num){
                //calculate densities
                $phrasecount = count(explode(" ", $word));
                $density = number_format(  ($num / $totalcount) * $phrasecount * 100, 2);
                $densities[$word] = $density;
            }
     
            // On trie le tableau des occurences par ordre décroissant
            arsort($wordcount);
     
            // Tri par ordre décroissant des densités
            arsort($densities);
     
            return array(
                'wordcount' => $wordcount,
                'densities' => $densities
            );
     
        }

Discussions similaires

  1. [Encodage] Accents non pris en compte (Notepad++)
    Par Crocodile26 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 30/09/2012, 22h00
  2. [MySQL] Accent non pris en compte BDD
    Par aalex57 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/01/2012, 10h10
  3. [FPDF] Accents non pris en compte dans mes PDF
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/05/2009, 13h28
  4. Réponses: 4
    Dernier message: 27/02/2008, 16h30
  5. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57

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