Soucis d'encodage apostrophe UTF8

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par paulo198851, 10 Octobre 2011.

Tags:
  1. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Bonjour, d'habitude je ne poste pas pour ce genre de chose mais la je tourne en rond ...
    Dans ma base mySql lors d'un insert, mes données ne sont pas rentré correctement, c'est un problème d'encodage.

    Sur ma page web tout est bien affiché, cependant dans la base les accents sont correct mais l'apostrophe pose problème.
    Code:
    function config()
    {
    header("Content-Type: text/html; charset=utf-8");
    ini_set("max_execution_time", 0); 
    $serveur = "localhost";
    $nom_base = "veto";
    $login = "root";
    $pwd = "";
    mysql_connect ($serveur,$login,$pwd) or die ('ERREUR '.mysql_error()); 
    
    if (mysql_connect ($serveur,$login,$pwd)) {
      echo 'connexion réussie';
    }
    else {
      echo 'connexion impossible...'.mysql_error();
    }
    
    // sélection de la base de données
    mysql_select_db ($nom_base) or die ('ERREUR '.mysql_error()); 
    mysql_query("SET NAMES UTF8");
    require_once 'simple_html_dom.php';
    }
    
    
    Code:
    function parserSubstances_temp ()
    {
    $html = new simple_html_dom();
    $id = 7;
    // Boucle sur tout les éléments de la base extranet
    while($id <= 8)
        {
    $url = "https://extranet.edqm.eu/4DLink1/4DCGI/web_view/mono/$id";
    $file = @fopen($url, 'r'); 
    // On test si le fichier existe ou non
    if ($file)
        //Si il exite en commencer à parser la page et récupérer les données
        {
        $html->load_file($url);
        // Sur ces 5 je parcours les lignes du tableau pour me positionner sur l'élément souhaité.
        $monoNumber     =    $html->find('td', 5)->plaintext;
        $englishName    =    $html->find('td', 7)->plaintext;
        $frenchName     =    $html->find('td', 9)->plaintext;
        $latinName      =    $html->find('td', 11)->plaintext;
        $PhEurStatus    =    $html->find('td', 17)->plaintext;
        echo $frenchName ;
        // On test si le status n'est pas plus grand que 1, cela nous permet de savoir si un texte est aussi présent.
        if(strlen($PhEurStatus) > 1 ){$PhEurDeleted = 1;} else {$PhEurDeleted = 0;}
        
        }
            // Ligne de test(désactivé)
            // echo $monoNumber." ".$englishName." ".$frenchName. " ".$latinName." ".$PhEurStatus."<br/>"; // Pour test
            // Requète d'ajout de no données et gestion des doublons avec ON DUPLICATE KEY UPDATE, si un doublon
            // est détécté la requète se transforme en update.
            $query = "INSERT INTO substances_temp(PhEurMonograph,TermName_FR,TermName_EN,Termname_LA,PhEurStatus,PhEurDeleted) VALUES('$monoNumber','$frenchName','$englishName','$latinName','$PhEurStatus', '$PhEurDeleted')
            ON DUPLICATE KEY UPDATE PhEurMonograph=$monoNumber";
            // On execute la fonction
            $result = mysql_query($query);  
            // On ferme le fichier et livère la mémoire.
            fclose($file); 
    // On incrément l'id de 1 pour changer de document.        
    $id++;
        }
    }
    
    Et ma table est en Interclassement : utf8_general_ci.
    J'ai essayer pas mal de truc et rien ne passe :(

    Exemple de ce que ça me met : Argent (nitrate d&#39;)
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 029
    J'aime reçus:
    291
    En regardant une des page que tu essaies de parser:
    -https://extranet.edqm.eu/4DLink1/4DCGI/web_view/mono/7

    L'apostrophe est le seul caractère codé en entité HTML:
    Code:
    Ammonium (chlorure d&#39;)
    
    Quel est le problème lors de l'insert MySQL ?
    Je vois que tu n'échappes pas les données lors de l'insert.
     
  3. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Bah en fait dans ma base sql c'est écrit Ammonium (chlorure d&#39;) au lieu de Ammonium (chlorure d'), il faut donc que j'encode le d&#39; et je n'y arrive pas :(
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 029
    J'aime reçus:
    291
    Essaies avec html_entity_decode().

    PHP:
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php&nbsp;<br /></span><span class="syntaxkeyword">echo&nbsp;</span><span class="syntaxdefault">html_entity_decode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Ammonium&nbsp;(chlorure&nbsp;d&#39;)'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">?><br /></span></span>
    Et n'oublie pas d'échapper les données à insérer, sinon tu vas tomber sur un autre problème.
     
  5. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Re, j'ai tenter de decode ça me rentre toujours une ligne dans ma base avec une erreur sur le caractère '.
    Sinon j'ai tenté mysql_real_escape_string pour échapper et toujours pareil :'(

    Voila une ligne de ma base sql :
    109 Ammonium (chlorure d&#39;) Ammonium chloride Ammonii chloridum 7 4 0

    Qui devrait être
    109 Ammonium (chlorure d') Ammonium chloride Ammonii chloridum 7 4 0
     
  6. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 029
    J'aime reçus:
    291
    Il faut faire les 2: html_entity_decode + mysql_real_escape_string.
     
  7. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Code:
        $englishName    =    html_entity_decode(mysql_real_escape_string($html->find('td', 7)->plaintext));
        $frenchName     =    html_entity_decode(mysql_real_escape_string($html->find('td', 9)->plaintext));
        $latinName      =    html_entity_decode(mysql_real_escape_string($html->find('td', 11)->plaintext));
    J'ai tenter comme ceci ? mais tjr pas :(
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 029
    J'aime reçus:
    291
    Il faut d'abord html_entity_decode puis mysql_real_escape_string, pas l'inverse comme tu montres.
     
  9. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    J'ai tenter ceci :
    Un echo sur ma page php me ressort : Ammonium (chlorure d')
    et dans ma base : Ammonium (chlorure d&#39;)

    Mon phpmyadmin m'en veut je crois =$
     
  10. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Ma deadline est pour ce soir, faut que je trouve cette solution ... :(
     
  11. IllusionPerdu
    IllusionPerdu WRInaute discret
    Inscrit:
    11 Mars 2006
    Messages:
    130
    J'aime reçus:
    0
    Tu insert bien un nouvelle enregistrement et il est faut ? Car ta requête qui met a jour en début de page ne met pas a jour tous les champs...
    Code:
    ON DUPLICATE KEY UPDATE PhEurMonograph=$monoNumber
     
  12. tonguide
    tonguide WRInaute passionné
    Inscrit:
    28 Novembre 2003
    Messages:
    1 169
    J'aime reçus:
    0
  13. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Merci de vos réponses en fait mon caractère est en ascii et la conversion ascii et utf8 est automatique.
    A vrai dire ce n'est pas vraiment un problème mais c'est que je code pour mon employeur et il est assez strict sur ce qu'il veut.
    Je vais voir avec lui mais c'est vraiment étrange :p

    Sinon pour faire mes test je supprimais la ligne en question donc tout les champs se mettais bien à jour.
    Si je trouve je posterais ici.
     
  14. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    J'ai eu le même soucis avec ma base, ça vient de la configuration de celle-ci je crois.

    Pour ma part, les accents et tous les caractères spéciaux étaient encodés, j'ai finalement réussi à insérer n'importe quoi correctement en faisant ceci lors de l'insert :

    html_entity_decode(addslashes($data))

    Ca doit revenir au même que ce que t'as dit Spout mais tu peux tjrs essayer...
     
  15. paulo198851
    paulo198851 Nouveau WRInaute
    Inscrit:
    2 Octobre 2009
    Messages:
    35
    J'aime reçus:
    0
    Ralalala toujours pareil je vais regarder du coté de la fonction qui parse la page web il y à peux être un hic la dedans.
    Merci de votre aide en tout cas :).
     
Chargement...
Similar Threads - Soucis encodage apostrophe Forum Date
Soucis d'encodage....je deviens fou...et c'est certainement tout bête. Demandes d'avis et de conseils sur vos sites 16 Novembre 2009
Soucis de description dans les resultats google Problèmes de référencement spécifiques à vos sites 10 Juin 2020
WordPress Soucis 404 suite changement structure permaliens Référencement Google 18 Juin 2019
Soucis d'affichage de publicité AdSense 4 Janvier 2018
soucis d'indexation Demandes d'avis et de conseils sur vos sites 27 Octobre 2017
Soucis d'affichage dans Google ! Référencement Google 22 Avril 2017
Soucis de classement ou incompréhension Problèmes de référencement spécifiques à vos sites 29 Octobre 2015
Prestashop - Soucis Url - Site multilingue Débuter en référencement 24 Juin 2015
Soucis de redirection sans www vers www URL Rewriting et .htaccess 13 Avril 2015
Soucis avec PageSpeed Crawl et indexation Google, sitemaps 23 Février 2015
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice