2010-01-08 8 views
1

Je suis en train d'analyser les pages HTML et recherche des paragraphes (<p>) en utilisant get_elements_by_tag_name('p');nodeValue de DomDocument retour des personnages étranges en PHP

Le problème est que lorsque j'utilise $element->nodeValue, il est de retour des personnages étranges. Le document est chargé en premier dans $ html en utilisant curl puis en le chargeant dans un document DomDocument.

Je suis sûr que cela a à voir avec les charsets.

Voici un exemple de réponse: "aujourd hui hui".

Merci d'avance.

+0

quel est le codage de la page html dans cet exemple particulier? – Anurag

+0

@Anurag C'est UTF-8. – Elie

+0

duplication possible de [PHP DOMDocument loadHTML ne pas encoder correctement UTF-8] (http://stackoverflow.com/questions/8218230/php-domdocument-loadhtml-not-encoding-utf-8-correctly) – cmbuckley

Répondre

1

Ceci est un problème de codage. essayez de définir explicitement l'encodage sur UTF-8.

cela devrait aider: http://devzone.zend.com/article/8855

+0

Déjà essayé ça et ça n'a pas fonctionné ... La chose amusante est que si je fais $ doc-> saveHTML(), l'encodage du HTML de retour est totalement correct. – Elie

+0

Quel est le '' spécifié dans le code HTML? – prodigitalson

3

Je fixe ce en forçant la conversion en UTF-8, même si le texte original était UTF-8:

$text = iconv("UTF-8", "UTF-8", $text); 
$dom = new SmartDOMDocument(); 
$dom->loadHTML($webpage, 'UTF-8'); 
. 
. 
echo $node->nodeValue; 

PHP est :) wierd

3

J'ai eu les mêmes problèmes et maintenant remarqué que loadHTML() ne prend plus 2 paramètres, donc j'ai dû trouver une solution différente. En utilisant la fonction suivante dans ma bibliothèque DOM, j'ai été capable de supprimer les caractères funky de mon contenu HTML.

private static function load_html($html) 
{ 
    $doc = new DOMDocument; 
    $doc->loadHTML('<?xml encoding="UTF-8">' . $html); 

    foreach ($doc->childNodes as $node) 
     if ($node->nodeType == XML_PI_NODE) 
      $doc->removeChild($node); 

    $doc->encoding = 'UTF-8'; 

    return $doc; 
} 
Questions connexes