2010-10-06 33 views
1

je reçois la page dans utf-8 avec le langage russe en utilisant curl. si je fais écho au texte, cela se voit bien. puis j'utilise un tel codephp problème avec le langage russe

$dom = new domDocument; 

     /*** load the html into the object ***/ 
     @$dom->loadHTML($html); 

     /*** discard white space ***/ 
     $dom->preserveWhiteSpace = false; 

     /*** the table by its tag name ***/ 
     $tables = $dom->getElementsByTagName('table'); 

     /*** get all rows from the table ***/ 
     $rows = $tables->item(0)->getElementsByTagName('tr'); 

     /*** loop over the table rows ***/ 
     for ($i = 0; $i <= 5; $i++) 
     { 
      /*** get each column by tag name ***/ 
      $cols = $rows->item($i)->getElementsByTagName('td'); 

      echo $cols->item(2)->nodeValue; 

      echo '<hr />'; 
     } 

$ html contient du texte russe. après la ligne echo $ cols-> item (2) -> nodeValue; afficher le texte de l'erreur, pas russe. J'essaye iconv mais ne fonctionne pas. des idées?

+0

Je ne comprends pas votre question. Quel texte d'erreur obtenez-vous? Que signifie "ne pas travailler"? –

+0

au lieu de russe je reçois Ð ÑоÑо? – kusanagi

Répondre

9

Je suggère l'utilisation mb_convert_encoding avant charge la page UTF-8.

 
    $dom = new DomDocument(); 
    $html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8"); 
    @$dom->loadHTML($html); 

ou bien vous pouvez essayer cette

 
    $dom = new DomDocument('1.0', 'UTF-8'); 
    @$dom->loadHTML($html); 
    $dom->preserveWhiteSpace = false; 
    .......... 
    echo html_entity_decode($cols->item(2)->nodeValue,ENT_QUOTES,"UTF-8"); 
    .......... 
+0

super !!!!!!!!!!!! – kusanagi

+1

+1 pour mb_convert_encoding –

+0

loadHTML ne prend en charge que l'ISO-88591 à ma connaissance. C'est pourquoi vous devez encoder tous les caractères utf-8 dans leurs entités (qui sont vraiment des entités utf-16). Si vous voulez éviter la conversion, vous pouvez utiliser loadXML qui supporte utf-8, mais loadXML est très strict sur les éléments cassés, et vous devez faire beaucoup de corrections de chaînes pour les éléments non fermants comme
Gorilla3D

0

Le DOM ne peut pas reconnaître le codage HTML. Vous pouvez essayer quelque chose comme:

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

// taken from http://php.net/manual/en/domdocument.loadhtml.php#95251 
+1

je dois charger html pas xml, de cette façon ne fonctionne pas du tout – kusanagi

+0

C'est ce qu'il fait. HTML est essentiellement un document XML avec une définition donnée. Vous pouvez toujours essayer et voir si cela fonctionne. – bisko

0

mb_convert_encoding ($ html, 'HTML' ENTITÉS, "UTF-8");

La même chose a fonctionné pour PHPQuery.

P.S. J'utilise phpQuery :: newDocument ($ html);

au lieu de $ dom-> loadHTML ($ html);