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

PHP & Base de données Discussion :

Compatibilité de charset [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut Compatibilité de charset
    Bonjour,

    Je viens d'installer un système de news sur mon site mais j'ai un problème de charset.

    Mes pages web contiennent le code suivant :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!doctype html>
    <html lang="fr">
        <head>
            <meta charset="utf-8"/>

    Dans la colonne interclassement de ma base de données, tout est en utf8_general_ci.

    Pourtant, lorsque j'affiche ma news, j'ai des caractères bizarres :

    Journ�e p�che � la truite

    Je n'arrive pas à résoudre ce problème !

    Pourriez-vous m'aider ? Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Suis ce tutoriel à la lettre et tu ne devrais plus avoir aucun soucis par la suite.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Merci, ça marche grâce à mysql_set_charset('utf8').

    Mais il reste un petit souci avec la ré-écriture des liens :

    Essai d'une news Jérôme 2 se transforme en 108-essai-d-une-news-jcirc-me-2.html alors qu'il devrait se transformer en 108-essai-d-une-news-jerome-2.html

    Je ne comprends pas pourquoi.

    Voici la fonction de ré-écriture de l'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    function rewrite_words($texte)
    {
    $texte = strtolower($texte);
    $texte = strtr($texte, 'àáâäéèêëíìîïóòôöúùûüýÿç', 'aaaaeeeeiiiioooouuuuyyc');
    $texte = preg_replace('#(&[a-z0-9\#]+;)#','-',$texte);
    $texte = preg_replace('#[^a-z0-9]#','-',$texte);
    $texte = preg_replace('#-+#', '-', $texte);
    $texte = trim($texte,'-');
    if (strlen($texte) == 0) $texte = '-';
    return urlencode($texte);
    }

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Toujours un problème d'encodage, au lieu de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = strtr($texte, 'àáâäéèêëíìîïóòôöúùûüýÿç', 'aaaaeeeeiiiioooouuuuyyc');
    Privilégie une fonction plus complexe mais qui enlève les accents sans risque d'erreur :

    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
            function supprAccents($str = null, $encoding = 'UTF-8') {
                if (!is_string($str)) {
                    return false;
                }
                /* transformer les caractères accentués en entités HTML */
                $str = htmlentities($str, ENT_NOQUOTES, $encoding);
     
                /* remplacer les entités HTML pour avoir juste le premier caractères non accentués 
                 * Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ... */
                $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
     
                /* remplacer les ligatures tel que : Œ, Æ ... 
                  Exemple "Å“" => "oe" */
                $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
                /* Supprime les espaces */
                $str = preg_replace('/\s/', '_', $str);
                /* Supprimer tout le reste */
                $str = preg_replace('#&[^;]+;#', '', $str);
     
                return $str;
            }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    OK. Il manque juste une chose : l'apostrophe. Il n'a pas été transformé et il manque aussi la mise en minuscule.

    Du coup, j'ai complété un peu la fonction :

    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
    function supprAccents($str = null, $encoding = 'UTF-8')
    {
    if (!is_string($str))
    {
    return false;
    }
    /* transformer les caractères accentués en entités HTML */
    $str = htmlentities($str, ENT_NOQUOTES, $encoding);
    /* remplacer les entités HTML pour avoir juste le premier caractères non accentués
    * Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ... */
    $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
    /* remplacer les ligatures tel que : Œ, Æ ...
    Exemple "Å“" => "oe" */
    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
    /* Supprime les espaces */
    $str = preg_replace('/\s/', '-', $str);
    /* Supprimer tout le reste */
    $str = preg_replace('#&[^;]+;#', '', $str);
    $str = preg_replace('#\'#', '-', $str);
    $str = strtolower($str);
    return $str;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compatibilité D5 / VNC
    Par gord's dans le forum Outils
    Réponses: 7
    Dernier message: 12/05/2004, 17h02
  2. help!! problème de compatibilité ascendante
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 16/06/2003, 16h15
  3. [7RC3] Compatibilité avec les anciennes versions ...
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/05/2003, 16h46
  4. Compatibilité Visibroker 4.5 C++ Builder
    Par manuel dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 21h57
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

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