PHP очищает HTML между тегами ‹pre›

I'm having trouble with finding out how to scrape HTML content from only inside

 and 
tags with PHP5.

Я хочу взять пример следующего документа, взять 2 (или более областей с предварительными тегами, его динамика) и засунуть их в массив.

blablabla
<pre>save
this
really</pre>
not this
<pre>save this too
really
</pre>
but not this

как запихнуть область между pre-тегами html файла на другом сервере в массив.


person Zachary Lassiter    schedule 09.11.2011    source источник


Ответы (3)


Я рекомендую использовать xpath

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXpath($doc);

$pre_tags = array();
foreach($xpath->query('//pre') as $node){
    $pre_tags[] = $node->nodeValue;
}
person pguardiario    schedule 09.11.2011

Предполагая, что HTML правильно сформирован, вы можете сделать что-то вроде:

$pos = 0;
$insideTheDiv = array();
while (($pos = strpos($theHtml, "<pre>", $pos)) !== false) {
    $pos += 5;
    $endPrePos = strpos($theHtml, "</pre>", $pos);
    if ($endPrePos !== false) {
        $insideTheDiv[] = substr($theHtml, $pos, $endPrePos - $pos);
    } else break;
}

После того, как это будет сделано, $insideTheDiv должен быть массивом всего содержимого тегов pre.

Демонстрация: http://codepad.viper-7.com/X15l7P (удаляет новые строки из выход)

person jli    schedule 09.11.2011
comment
как сделать так, чтобы веб-страница на внешнем сервере попадала в переменную $theHtml? - person Zachary Lassiter; 09.11.2011
comment
Вы можете использовать $theHtml = file_get_contents($theWebpageURL); - person jli; 09.11.2011

вы можете просто использовать регулярное выражение для извлечения всего содержимого внутри тегов pre.

В питоне это будет:

re.compile('<pre>(.*?)</pre>', re.DOTALL).findall(html)
person hoju    schedule 14.11.2011