2010-10-06 1 views
1

Я получаю страницу в utf-8 с русским языком, используя curl. если я эхо текст, это хорошо. то я использую такой кодphp проблема с русским языком

$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 содержит русский текст. после него строка echo $ cols-> item (2) -> nodeValue; текст ошибки отображения, а не русский. Я пытаюсь iconv, но не работаю. есть идеи?

+0

Я не понимаю, в чем ваш вопрос. Какой текст ошибки вы получаете? Что означает «не работает»? –

+0

вместо этого русский я получаю ÑоÑо? – kusanagi

ответ

9

Я предлагаю использовать mb_convert_encoding до загрузки UTF-8 странице.

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

, иначе вы могли бы попробовать это

 
    $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

отлично !!!!!!!!!!!! – kusanagi

+1

+1 для mb_convert_encoding –

+0

loadHTML поддерживает только ISO-88591 из моего понимания. Вот почему вы должны кодировать все символы utf-8 в свои сущности (которые действительно являются объектами utf-16). Если вы хотите избежать преобразования, вы можете использовать loadXML, который поддерживает utf-8, однако loadXML очень строгий на сломанных элементах, плюс вам нужно сделать множество исправлений строк для неблокирующих элементов, таких как
Gorilla3D

0

DOM не может распознать кодировку HTML. Вы можете попробовать что-то вроде:

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

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

Мне нужно загрузить html не xml, таким образом вообще не работать – kusanagi

+0

Это то, что он делает. HTML - это в основном документ XML с заданным определением. Вы всегда можете просто попробовать и посмотреть, работает ли это. – bisko

0

mb_convert_encoding ($ HTML, 'HTML-Сущностей', "UTF-8");

То же самое для PHPQuery.

P.S. Я использую phpQuery :: newDocument ($ html);

вместо $ dom-> loadHTML ($ html);

Смежные вопросы