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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    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
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    Par défaut
    Suis ce tutoriel à la lettre et tu ne devrais plus avoir aucun soucis par la suite.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    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
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    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;
            }
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 28
    Points
    28
    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