Soucis d'encodage apostrophe UTF8

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 14:48

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: Tout sélectionner
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: Tout sélectionner
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;)


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:03

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: Tout sélectionner
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.

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:09

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 :(


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:27

Essaies avec html_entity_decode().

Code: Tout sélectionner

<?php 
echo html_entity_decode('Ammonium (chlorure d&#39;)');
?>

Et n'oublie pas d'échapper les données à insérer, sinon tu vas tomber sur un autre problème.

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:35

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


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:39

Il faut faire les 2: html_entity_decode + mysql_real_escape_string.

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:40

Code: Tout sélectionner
    $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 :(


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:42

Il faut d'abord html_entity_decode puis mysql_real_escape_string, pas l'inverse comme tu montres.

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:45

J'ai tenter ceci :
$frenchName = html_entity_decode($frenchName);
$frenchName = mysql_real_escape_string($frenchName);
echo $frenchName;


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 =$

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 15:56

Ma deadline est pour ce soir, faut que je trouve cette solution ... :(


IllusionPerdu
WRInaute discret
WRInaute discret
 
Messages: 141
Inscription: 11 Mar 2006

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 16:36

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: Tout sélectionner
ON DUPLICATE KEY UPDATE PhEurMonograph=$monoNumber

tonguide
WRInaute passionné
WRInaute passionné
 
Messages: 1407
Inscription: 28 Nov 2003

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 17:19

En même temps, si ton soucis c'est juste le quote simple, tu mets une petite rustine du genre

Code: Tout sélectionner
$txt = str_replace("&#39;","'", $txt);


et tu passes à autre chose

ou regarde ça
http://www.php.net/manual/en/function.htmlspecialchars-decode.php

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Lun Oct 10, 2011 19:26

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.

lambi521
WRInaute impliqué
WRInaute impliqué
 
Messages: 782
Inscription: 15 Juin 2010

Re: Soucis d'encodage apostrophe UTF8

Message le Mar Oct 11, 2011 8:25

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...

paulo198851
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 34
Inscription: 2 Oct 2009

Re: Soucis d'encodage apostrophe UTF8

Message le Mar Oct 11, 2011 8:42

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 :).


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: enams90 et 0 invités