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

Langage PHP Discussion :

compatibilité loadhtml et utf-8


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut compatibilité loadhtml et utf-8
    Bonjour,

    J'ai besoin d'utiliser un objet DomXpath pour analyser des pages HTML
    Pour cela j'utilise les lignes de codes suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $dom = new DomDocument;
    @$dom -> loadHTML($url_content);
    $xpath = new DomXPath($dom);
    $url_content est le contenu d'une page web récupéré via CURL

    Cela fonctionne bien mis à part sur quelques sites (pas tous) en UTF-8 où le loadhtml retourne un fichier vide (sans erreur particulière)
    Le problème est comme je l'ai deja dit plus haut ce n'est pas systématique : pour la plupart des sites en UTF-8 cela fonctionne

    Quelque'un a t-il un retour d'expérience similaire ? et/ou une solution pour l'aider ?

    d'avance merci

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 842
    Points : 6 522
    Points
    6 522
    Par défaut
    Les noms de ces classes sont DOMDocument et DOMXPath (avec DOM en majuscule).

    Si tu veux voir les éventuels messages d'erreurs enlève l'arobase devant $dom->loadHTML($url_content);, peut être qu'ils contiennent des informations susceptibles de t'aider.

    Concernant ton contenu vide, as-tu vérifier que $url_content ne l'était pas auparavant? Je ne pense pas que l'UTF8 soit en cause.

    NB: il n'est pas forcément utile d'utiliser cURL pour obtenir le contenu de la page web, la méthode DOMDocument::loadHTMLFile peut s'en charger, et les paramètres que l'on peut passer à cURL, peuvent être passés à cette méthode via stream_context_create et stream_context_set_option.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut
    $url_content contient bien le fichier

    si l'utf-8 est en cause j'ai pu le vérifier en utilisant la "bidouille suivante" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dom->loadHTML('<?xml encoding="UTF-8">' . $url_content);
    mais ce n'est pas une solution pérenne

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 842
    Points : 6 522
    Points
    6 522
    Par défaut
    Et as-tu essayer de passer l'encodage directement dans le constructeur?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom = new DOMDocument('1.0', 'UTF-8');
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut
    je vais essayer, mais que se passera t-il pour les pages html qui ne sont pas en utf-8 ?

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 842
    Points : 6 522
    Points
    6 522
    Par défaut
    Non en fait ça ne change rien, l'encodage est systématiquement redéfini au chargement de la page. Mais je pense toujours que l'encodage n'y est pour rien. Peux-tu donner l'url d'une des pages problématiques.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut
    avec ta préco
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom = new DOMDocument('1.0', 'UTF-8');
    ca ne fonctionne pas

    je rappelle qu'avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom->loadHTML('<?xml encoding="UTF-8">' . $url_content);
    cela fonctionne bien

    je ne peux malheureusement pas donner de lien pour des raisons de discrétion

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 842
    Points : 6 522
    Points
    6 522
    Par défaut
    Difficile de t'aider sans voir le fichier en cause.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut
    voici les premières lignes de ma page html

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>XXXXXXX</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="language" content="fr" />
    <meta http-equiv="Content-Language" content="fr" />

    en espérant que ce sera suffisant

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Ton $url_content vient directement de curl ou tu le stockes en bdd avant ?

    Sinon peut être ca qui pourrait t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // http://php.net/manual/fr/function.mb-convert-encoding.php
    public function encodeToUtf8($string) {
         return mb_convert_encoding($string, "UTF-8", mb_detect_encoding($string, "UTF-8, ISO-8859-1, ISO-8859-15", true));
    }
    Au pire, possibilité d'avoir l'url problématique en MP ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut
    mon url_content vient directement du CURL

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 97
    Points
    97
    Par défaut
    ce qui est bizarre, c'est que pour d'autres pages en UTF-8 cela fonctionne

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

Discussions similaires

  1. Problèmes de compatibilités avec fr_FR.UTF-8 ?
    Par Aurelienjjj dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/05/2012, 15h43
  2. help!! problème de compatibilité ascendante
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 16/06/2003, 17h15
  3. [7RC3] Compatibilité avec les anciennes versions ...
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/05/2003, 17h46
  4. Compatibilité Visibroker 4.5 C++ Builder
    Par manuel dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 22h57
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 22h33

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