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 :

Impossible de convertir correctement en UTF-8 [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2014
    Messages : 5
    Par défaut Impossible de convertir correctement en UTF-8
    Bonjour,

    je ne parviens pas à faire fonctionner ma fonction PHP correctement.

    Voici ma fonction PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Création d'une fonction PHP pour encoder en UTF-8 n'importe quelle chaine de caractere
    	public function convertString($string) {
    		$encoding = mb_detect_encoding($string);
    		if($encoding != 'UTF-8') {
    			$string = iconv($encoding, 'UTF-8', $string);
    		}
    		return $string;
    	}
    Cette fonction devrait théoriquement toujours bien fonctionner mais il arrive certaines situations où la fonction ne remplis pas correctement son rôle.

    Je précise que j'ai bien encoder mes fichiers en UTF-8 et que j'ai ajouté la balise meta charset UTF-8.

    Dans certaines situations, il me renvois ce genre de résultat é ou encore ê

    Le truc c'est que cette fonction PHP fonctionne à l'état brut, mais lorsque je parse des pages HTML et que j'extrai le contenu des pages via le DOM, je n'arrive pas toujours à obtenir une chaine formatée correctement.

    Voici la fonction que j'utilise pour extraire le contenu HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function getHtml() {
    		$global_sql_connection = $this->global_sql_connection;
    		$ch = curl_init();
    		$user_agent="Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0";
    		curl_setopt ($ch, CURLOPT_URL, $this->global_url);
    		curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
    		curl_setopt ($ch, CURLOPT_HEADER, 0);
    		curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
    		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    		curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,1);
    		curl_setopt ($ch,CURLOPT_TIMEOUT,5);
    		curl_setopt ($ch,CURLOPT_MAXREDIRS,2);
    		$this->global_html = curl_exec($ch);
    	}
    Comment faire s'il vous plaît ?

    Merci

    Salutations.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux nous donner une page avec laquelle cela ne fonctionne pas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2014
    Messages : 5
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu peux nous donner une page avec laquelle cela ne fonctionne pas ?
    Non en fait, finalement entre temps, j'ai compris que mon problème venait du DOM lors du chargement du contenu HTML. Le DOM ne chargeait pas le document HTML dans le bon encodage... ce qui m'affichait donc parfois des caractères accentués. Mais mon problème n'est pas encore completement résolu car ma nouvelle fonction fonctionne avec certaines chaines de caractere et pas avec d'autres, bref c'est pas facile de matriser les différentes langues dans les différents encodages...

    Merci quant même

    Edit : sinon pour revenir sur mon message précédent, voici le détail de l'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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
     
    echo "<meta charset=\"UTF-8\">";
     
    // Conversion d'une chaine
    $ch = curl_init();
    $user_agent="Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0";
    curl_setopt ($ch, CURLOPT_URL, 'http://www.taobao.com');
    curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt ($ch,CURLOPT_TIMEOUT,50);
    curl_setopt ($ch,CURLOPT_MAXREDIRS,2);
    $content = curl_exec($ch);
    $content_type = curl_getinfo($ch,CURLINFO_CONTENT_TYPE);
    $encoding = mb_detect_encoding($content);
    $checkencoding = mb_check_encoding($content, 'UTF-8');
    $dom = new DOMDocument;
    if($encoding == 'UTF-8') {
    	$dom->loadHTML($content);
    } else {
    	$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
    }
    $tab = array();
    $htmls = $dom->getElementsByTagName('p');
    foreach ($htmls as $html)
    {
        $htmlvalue = $html->nodeValue;
        $htmlvalue = strip_tags($htmlvalue);
        array_push($tab, $htmlvalue);
    }
    $htmls = $dom->getElementsByTagName('span');
    foreach ($htmls as $html)
    {
        $htmlvalue = $html->nodeValue;
        $htmlvalue = strip_tags($htmlvalue);
        array_push($tab, $htmlvalue);
    }
    foreach($tab as $line) {
    	$encoding = mb_detect_encoding($line);
    	$string = mb_convert_encoding($line, 'UTF-8', $encoding);
    	echo $line;
    }
     
    ?>
    J'essaye de créer un petit moteur de recherche et je souhaite donc uniformiser le stockage des données avec l'encodage UTF-8. Théoriquement le site taobao.com est un site encodé en UTF-8 mais le site a l'encodage suivant déclaré : gb2312. Il est impossible d'afficher les données correctement.

    D'où pourrait venir le problème s'il vous plaît ?

    En sachant qu'avec certains sites ça fonctionne parfaitement bien....

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pourquoi ne pas utiliser le script iconv.exe pour réencoder ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2014
    Messages : 5
    Par défaut
    Citation Envoyé par tanaka59 Voir le message
    Salut,

    Pourquoi ne pas utiliser le script iconv.exe pour réencoder ?
    Théoriquement la fonction PHP suivante : mb_convert_encoding devrait me donner le même résultat. J'ai déjà essayé avec cette fonction mais ça ne me donne pas des résultats satisfaisants.

    Ca fonctionne dans 70% des cas, mais certains sites comme taobao.com (qui ont un mauvais encodage parfois) ça ne marche pas...

    Il faut que tout soit en UTF-8 (balise meta charset, fichier codé en UTF-8,...) et malgré tout ça parfois ça ne fonctionne pas.

    Le problème vient du DOM load qui me charge le contenu html dans un autre jeu de caractère. Bref c'est pas facile.

    Ma seule solution valide c'est de modifier les lignes ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($encoding == 'UTF-8') {
    	$dom->loadHTML($content);
    } else {
    	$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Verifier ton/tes navigateurs.

    J'ai déjà eu ce souci . Il fallait changer l'affichage du navigateur (dans affichage >> encodage). Je vais remettre la main sur une note qui traine !

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

Discussions similaires

  1. Impossible de convertir les sauts de lignes \n en <br> dans une jsp.
    Par michaelcourcy dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/11/2006, 17h32
  2. Réponses: 5
    Dernier message: 03/10/2006, 11h53
  3. Réponses: 4
    Dernier message: 06/06/2006, 16h18
  4. [XPATH] Impossible de convertir #BOOLEAN en un NodeList
    Par claudyyyyy dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 08/02/2006, 16h00
  5. Impossible d'éteindre correctement
    Par sdx dans le forum Administration système
    Réponses: 2
    Dernier message: 20/11/2005, 20h37

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