1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

Проблемка с PHP Simple HTML DOM Parser. Парсит, не останавливается на конце тега

Тема в разделе "PHP, Perl и др.", создана пользователем zerokko, 7 авг 2013.

  1. zerokko
    zerokko Продвинутый
    Симпатии:
    21
    Собственно проблема, даже две

    1) Есть кусок кода:

    Код PHP
    Код:
    ....
    $com = ' '; // еще один буфер
     
    foreach($elements as $element) {
     
        $res[$i]['prize'] = $element->children(5)->plaintext;
        
        $com = $element->find("td.comment", 0);
        echo $com; echo '<br>'; echo '<br>';
        $i++; //увеличиваем значение итератора
     
    };
    ...

    На выходе получаем:
    Код HTML
    Код:
    <td class="comment">  <b>Пароль:</b> <span class="passwText">grains65<span>  </td>  <tdclass="game-param...
    Но </td> же закрылся! Почему оно парсит дальше? Через ->children()-> тоже не получается, эффект тот же...

    2) Помимо этого, чем можно решить проблему с кодировкой?

    В .htaccess прописано:
    Код:
    AddDefaultCharset Off
    <IfModule mod_charset.c>
            CharsetDisable On
            CharsetRecodeMultipartForms Off
    </IfModule>
    что решило проблему с латинскими символами, как быть с русскими?
     
    7 авг 2013
  2. lisa99
    lisa99 Новичок
    Симпатии:
    6
    я отказалась в свое время от этого чуда (свой), но по опыту могу предположить, что
    а)неправильно обрабатывается "td.comment", возможно в тексте есть вложенная структура ячеек таблиц, и парсер ищет окончание в другом месте
    и..разве не в одинарных кавычках параметр при вызове метода?
    и разве нельзя ограничится просто 'comment'?
    б) проскочит закрывающий тег, если там, допустим, лишний пробел или слеш.
    поэтому я пользовалась strip_tags_smart, ибо постоянно были косяки с некорректным html
    в)что касательно кодировки - да, дергать плейнтекст между тегами и какой-нибудь функцией преобразовать в utf-8 (Вариантов много)
     
    17 авг 2013
    1 человеку нравится это.
  3. zerokko
    zerokko Продвинутый
    Симпатии:
    21
    lisa99, Спасибо за ответ, уже разобрался, тэг <span> открывался еще раз, вместо того чтобы закрыться. С кодировкой тоже все норм, но за ответ спасибо ;)
     
    18 авг 2013
  4. lisa99
    lisa99 Новичок
    Симпатии:
    6
    да, но ситуация будет повторятся много раз, если парсить разные веб-источники, ведь не везде корректно расставлены теги.
    Например та же функция strip_tags_smart автоматически делает теги парными ("закрывает"). Поэтому или допиливать чужие либы (классы), либо компоновать свое, как я и сделала.
    Если собираетесь парсить часто и все подряд - скорее всего у вас закончится тем же самым..
     
    18 авг 2013
  5. zerokko
    zerokko Продвинутый
    Симпатии:
    21
    lisa99, Я решил прогоном через Tidy, что помогает избавиться от такой лабуды, делает код валидным
     
    19 авг 2013

Поделиться этой страницей

Загрузка...