La lettre à est remplacée par un point ?

Bonjour,

Comme indiquer dans le titre, j'ai un soucis avec mes pages php/html
en fait les lettres accentuées (é, è, ù etc... s'affichent normalement alors que la lettre à est remplacée par un point d'interrogation dans la base de donnée MySql.
voici le début de mon fichier

<?php
$titre = "Administration";

function getEtat($EtatEnInt)
{
if ($EtatEnInt == 2)
return "Occasion";
else if ($EtatEnInt == 0)
return "Neuf-déclassé";
else if ($EtatEnInt == 1)
return "Neuf";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title><?php echo $titre; ?></title>
<link rel="stylesheet" href="style_administration.css" />
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<meta name="ROBOTS" content="all">
<meta name="keywords" content="Solectrom,éléctroménager,machine, cuisine">
<meta name="author" content="kessir">
<meta name="title" content="<?php echo $titre; ?>">
<meta name="description" content="Développeur d'applications informatiques et développeur web">
<meta name="geo_position" content="France">
</head>


dans la structure de la base de données
j'ai met
l'interclassement = latin1_swedish_ci
et aussi
l'interclassement = utf8_general_ci
merci d'avance pour votre aide

2 réponses

  1. Modérateur
    Bonjour,

    Si ces caractères s'affichent normalement quel est le problème ?
    C'est peut-être juste l'outil que tu utilises pour visualiser la base de données qui n'arrive pas à afficher ces caractères, mais tant que la page html générée est bonne ça n'a aucune importance.
    0
    1. Modérateur
      Bonjour,

      Tu travailles (dans ta page web) en UTF8 ....
      Il faut faire de même avec la BDD pour éviter tout souci d'encodage.

      et puis... tu nous parles des données mises en BDD ...... mais à aucun moment tu ne nous montres le code qui te sert à les y mettre !

      0
      1. Bonsoir à tous,
        Merci d'avoir répondu
        effectivement les caractères accentués s'affichent normalement sauf le à qui est remplacé par ? et ça c'est quand j'utilise
        l'interclassement = latin1_swedish_ci
        mais quand j'utilise
        l'interclassement = utf8_general_ci le
        à ne s'affiche pas du tout il est remplacé par un blanc
        pour le code qui me permet d'enregistrer dans la BDD

        //Fonction de connexion à la base de données
            function setConnexion() {
        
                $this->_bdd = "Solectrom";
                $this->_localhost = "localhost";
                $this->_root = "root";
                $this->_mdp = "";        
                //On se connecte é la base de données "solectrom"
                try 
                {
                    //$bdd = new PDO('mysql:host=localhost;dbname=solectrom', 'root', '');
                    $this->_connexion = new PDO('mysql:host=' . $this->_localhost . ';dbname=' . $this->_bdd, $this->_root, $this->_mdp);
                    $this->_connexion->query("SET NAMES UTF8");
                    /* echo("connexion réussie");  */
                } 
                catch (Exception $e) 
                {
                    die('Erreur : ' . $e->getMessage());
                }
            }
        
        //Fonctions d'insertion de données dans les tables correspondantes
            function fonctionInsererDonneesDansTableCorrespondante($typeAppareil, $bdd, $fichier_image, $dir_mini, $dir_reelle) {
                //Si il ya plus de 300 caractere dans le commentaire on supprime l'exident.
                $nouv_commentaire = substr ($_POST['commentaire'] , 0 , 300 );
                switch ($typeAppareil) {                   
                    case 1:
                        //Ca concerne la table "table_lave_linge";                     
                        $bdd->exec('INSERT INTO table_lave_linge(reference, designation, marque, modele, etat, placement, ouverture, nbr_trs, capacite, prix, photo_reelle, photo_mini, vendu, eco_taxe, commentaire) VALUES(\'' . $this->suppr_espaces($_POST['reference']) . '\' ,\'' . $this->suppr_espaces($_POST['designation']) . '\' ,\'' . $this->suppr_espaces(htmlspecialchars($_POST['marque'])) . '\',\'' . $this->suppr_espaces(htmlspecialchars($_POST['modele'])) . '\',\'' . $_POST['etat'] . '\',\'' . $_POST['placement'] . '\',\'' . $_POST['ouverture'] . '\',\'' . $_POST['nbr_trs'] . '\',\'' . $_POST['capacite'] . '\',\'' . $_POST['prix'] . '\',\'' . $dir_reelle . '/' . $fichier_image . '\',\'' . $dir_mini . '/' . $fichier_image . '\',\'' . $_POST['vendu'] . '\',\'' . $this->suppr_espaces($_POST['eco_taxe']).'\',\'' . $this->suppr_espaces(str_replace("'", "\'", nl2br($nouv_commentaire))) . '\')') or die(print_r($bdd->errorInfo())); //str_replace c'est pour remplacer ' par \'
                        break;
                    case 2:
                        //Ca concerne la table "table_seche_linge";
                        $bdd->exec('INSERT INTO table_seche_linge(reference, designation, marque, modele, etat, placement, ouverture, degagement, capacite, prix, photo_reelle, photo_mini, vendu, eco_taxe, commentaire) VALUES(\''  . $this->suppr_espaces($_POST['reference']) . '\' ,\'' . $this->suppr_espaces($_POST['designation']) . '\' ,\'' . $this->suppr_espaces($_POST['marque']) . '\',\'' . $this->suppr_espaces($_POST['modele']) . '\',\'' . $_POST['etat'] . '\',\'' . $_POST['placement'] . '\',\'' . $_POST['ouverture'] . '\',\'' . $_POST['degagement'] . '\',\'' . $_POST['capacite'] . '\',\'' . $_POST['prix'] . '\',\'' . $dir_reelle . '/' . $fichier_image . '\',\'' . $dir_mini . '/' . $fichier_image . '\',\'' . $_POST['vendu'] . '\',\'' . $this->suppr_espaces($_POST['eco_taxe']).'\',\'' . $this->suppr_espaces(str_replace("'", "\'", nl2br($nouv_commentaire))) .'\')') or die(print_r($bdd->errorInfo()));
                        break;
        }


        merci d'avance pour votre aide

        EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
        Explications disponibles ici :ICI

        Merci d'y penser dans tes prochains messages.
        0
      2. Modérateur
        Pour commencer.... active la gestion des erreurs PDO dans ton code.
        Ensuite... utilises les requêtes préparées ...ça évitera de devoir faire tous ces bidouilles pour "protéger" tes insertions...
        https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
        (tu noteras au passage qu'on n'utilises plus de OR DIE ... mais des blocs TRY/CATCH)

        Pense également à récupérer PROPREMENT les variables AVANT de les utiliser.
        https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index

        Et pour finir... les htmlspecialchars sont à utiliser lors de l'affichage des données dans la page... pas pour leur insertion en BDD qu'on préfèrera stocker de façon
        "brute".
        0
      3. Bonjour à tous,
        Merci à tous pour vos remarque instructives.

        Pour mon problème d'accents, c'est au niveau de l'insertion avec du script php, que ça cause problème.

        car quand j’enserre les données avec phpmyadmin tout se passe très bien

        voici la requête d'insertion

        //Ca concerne la table "table_lave_linge";                    
                        $bdd->exec('INSERT INTO table_lave_linge(reference, designation, marque, modele, etat, placement, ouverture, nbr_trs, capacite, prix, photo_reelle, photo_mini, vendu, eco_taxe, commentaire) VALUES(\'' . $this->suppr_espaces($_POST['reference']) . '\' ,\'' . $this->suppr_espaces(htmlspecialchars($_POST['designation'])) . '\' ,\'' . $this->suppr_espaces(htmlspecialchars($_POST['marque'])) . '\',\'' . $this->suppr_espaces(htmlspecialchars($_POST['modele'])) . '\',\'' . $_POST['etat'] . '\',\'' . $_POST['placement'] . '\',\'' . $_POST['ouverture'] . '\',\'' . $_POST['nbr_trs'] . '\',\'' . $_POST['capacite'] . '\',\'' . $_POST['prix'] . '\',\'' . $dir_reelle . '/' . $fichier_image . '\',\'' . $dir_mini . '/' . $fichier_image . '\',\'' . $_POST['vendu'] . '\',\'' . $this->suppr_espaces($_POST['eco_taxe']).'\',\'' . $this->suppr_espaces(str_replace("'", "\'", nl2br(htmlspecialchars(utf8_encode($nouv_commentaire))))) . '\')');


        merci à tous.
        0
      4. Quel est le code de la méthode suppr_espaces() ?

        La meilleure solution pour corriger ton problème serait surement celle proposée par jordane45 : utilise une requête préparée et évite l'utilisation de htmlspecialchars ou nl2br sur les données à insérer.
        0
      5. merci d'avance
        voici la fonction
            //Fonction pour supprimer les éspaces devant deriére et au milieu
            function suppr_espaces($chaine) {
                $chaine = preg_replace('/\s+/', ' ', $chaine);
                $chaine = trim($chaine);
                return $chaine;
            }
        0