Простой html_dom_parser не работает в Internet Explorer

Я пытаюсь разобрать веб-страницу html. Он работает правильно в Chrome, но не работает в Internet Explorer 10;

Это мой код:

//the content variable is a string with the html markup
$html = str_get_html($content);
$element = $html->find('div[style="width: 460px; padding-bottom: 20px; font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #666666;"]', 0);
$tmp = $element->plaintext;
print($tmp);die();

в google chrome я получаю результат, который хочу, просто текст, который находится внутри элемента, который я анализирую с помощью метода find(). В Internet Explorer я получаю пустой результат. Кажется, что он не находит конкретный элемент.

если, например, я делаю это:

foreach ($html->find('img') as $img) {
    $pre[] = $img->src;
}
print_r($pre);die();

я получаю результат, который хочу, как в Chrome, так и в Internet Explorer. (возвращает атрибут src всех изображений в строке)

Есть предположения? Спасибо


person musicvicious    schedule 30.10.2013    source источник
comment
что-то путает — не очень хорошее описание проблемы. В чем тут собственно проблема? Каков результат, который вы ожидаете? Чем он отличается от IE? Отличается ли фактическая сгенерированная страница каким-либо образом? (используйте источник просмотра, чтобы проверить). В каком режиме рендеринга его отображает IE? (для проверки используйте инструменты разработчика F12).   -  person Spudley    schedule 30.10.2013
comment
@Spudley, я использую источник для проверки. Я ожидаю простой текст, который находится внутри элемента, который я анализирую с помощью метода $html->find(); я не получаю ошибок. кажется, что он не находит конкретный элемент.   -  person musicvicious    schedule 30.10.2013
comment
Так что же вы получаете в IE тогда? Вы получаете неправильное значение? Часть стоимости? Совсем ничего? Откуда взялся файл $content? Это HTML-документ, который отправляется из браузера?   -  person Spudley    schedule 30.10.2013
comment
в т.е. я получаю пустой результат. $content — это строка HTML-разметки. Я попытался поместить содержимое в файл и проанализировать этот файл, но все равно: хороший результат в Chrome, ничего в Ie...   -  person musicvicious    schedule 30.10.2013
comment
$content поступает через кодировку Ajax base_64. Я декодирую строку и анализирую ее. Я работаю в Chrome, бот не работает в IE.   -  person musicvicious    schedule 30.10.2013
comment
Поэтому я предполагаю, что контент поступает по-разному между двумя браузерами. Генерируется ли он браузерным редактором, таким как ckEditor? Если это так, то да, есть большая вероятность, что браузеры будут генерировать другой код, особенно для чего-то подобного; вы никак не можете контролировать порядок, в котором будут генерироваться стили. Попробуйте посмотреть код, сгенерированный в $content, и сравнить его; вам может понадобиться переосмыслить, как вы загружаете элемент (может быть, дать ему класс вместо встроенных стилей?).   -  person Spudley    schedule 30.10.2013
comment
@Spudley, я обнаружил часть проблемы. Похоже, что IE меняет шестнадцатеричный цвет (#00000) на rgb (0, 0, 0). И именно поэтому я не получаю никакого вывода, потому что он не может найти этот элемент.   -  person musicvicious    schedule 30.10.2013
comment
@Spudley, у меня нет доступа к странице, которую я анализирую ... Я получаю содержимое страницы iframe.   -  person musicvicious    schedule 30.10.2013
comment
Ну, вам придется найти какой-то другой метод разбора, потому что, как вы обнаружили, метод, который вы используете, чрезвычайно хрупок. Одним из возможных вариантов может быть использование Goutte для его анализа, хотя у вас все еще будет та же проблема, если вы пытаетесь проанализировать на основе атрибута стиля. Есть ли у родительского элемента класс или идентификатор, на который можно ссылаться более надежно?   -  person Spudley    schedule 30.10.2013


Ответы (1)


Проблема в том, что Internet Explorer заменяет шестнадцатеричное значение цвета (например: #666666) его значением rgb (rgb(102, 102, 102)). Поэтому мне пришлось сделать особый случай для IE.

person musicvicious    schedule 20.01.2014
comment
Однако очевидно, что PHP не имеет ничего общего с браузером. Вот почему многие люди называют это серверной частью. - person ozanmuyes; 29.08.2014
comment
Да, PHP не имеет ничего общего с браузером, но он ищет в DOM то, что вы ищете. И IE вместо того, чтобы показывать шестнадцатеричное значение (# 666666), как это делают chrome или firefox, показывает значение RGB. И он не возвращает совпадение. - person musicvicious; 03.09.2014