2013-06-20 3 views
1

Я пытаюсь разобрать html-страницу Google play и получить некоторую информацию о приложениях. Simple-html-dom работает отлично, но если страница содержит код без пробелов, он полностью использует атрибуты. Например, у меня есть HTML-код:Simple-html-dom пропускает атрибуты

<div class="doc-banner-icon"><img itemprop="image"src="https://lh5.ggpht.com/iRd4LyD13y5hdAkpGRSb0PWwFrfU8qfswGNY2wWYw9z9hcyYfhU9uVbmhJ1uqU7vbfw=w124"/></div> 

Как вы можете видеть, нет никаких пробелов между image и src, так простой HTML-дом игнорирует src атрибут и возвращает только <img itemprop="image">. Если я добавлю место, он отлично работает. Чтобы получить этот атрибут, я использую следующий код:

foreach($html->find('div.doc-banner-icon') as $e){   
     foreach($e->find('img') as $i){ 
      $bannerIcon = $i->src;    
     } 
} 

Мой вопрос заключается в том, как изменить эту прекрасную библиотеку, чтобы получить полный внутренний текст этого div?

+0

Вместо простого HTML Dom Parser вы можете использовать [DOMDocument PHP] (http://php.net/manual/en/class.domdocument.php). В противном случае просто просмотрите этот фрагмент по адресу http://codepad.org/HdUQKx3l, просто загрузив и сохранив HTML через DOMDocument, добавьте пробелы, которые вам нужны в Simple HTML Dom Parser. –

ответ

1

Я просто создать функцию, которая добавляет к необходимому пространству содержания:

function placeNeccessarySpaces($contents){ 
$quotes = 0; $flag=false; 
$newContents = ''; 
for($i=0; $i<strlen($contents); $i++){ 
    $newContents.=$contents[$i]; 
    if($contents[$i]=='"') $quotes++; 
    if($quotes%2==0){ 
     if($contents[$i+1]!== ' ' && $flag==true) {    
      $newContents.=' '; 
      $flag=false; 
     }   
    } 
    else $flag=true;   
} 
return $newContents; 
} 

И затем использовать его после file_get_contents функции. Таким образом:

$contents = file_get_contents($url, $use_include_path, $context, $offset); 
$contents = placeNeccessarySpaces($contents); 

Надеюсь, это поможет кому-то еще.

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