2015-10-01 3 views
3

Мне нужно создать генератор PDF с использованием TCPDF и PHP. Я мог бы просто написать все в PDF, но это выглядело бы ужасно. Поэтому мне нужно получить каждый продукт в HTML на другой странице.Получить HTML-контент между двумя элементами

С новыми страницами это довольно просто. Просто используйте документ dom, чтобы найти <div> вокруг продуктов, поместите его в массив и напишите это в формате PDF.

К сожалению, не все страницы одинаковые, поэтому не каждая страница имеет <div>. Эта страница, например.

'<h3>sample#1</h3> 
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> 
<img> 
<table> 
</table> 

<h3>sample#2</h3> 
<p>Aenean commodo ligula eget dolor. Aenean massa.</p> 
<img> 
<table> 
</table> 

<h3>sample#3</h3> 
<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> 
<img> 
<table> 
</table> 

<h3>sample#4</h3> 
<p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.</p> 
<img> 
<table> 
</table>' 

Так что я пытаюсь получить, что-то вроде этого:

array (size=4) 
0 => string " 
<h3>sample#1</h3> 
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> 
<img> 
<table> 
</table>" 
1=> string " 
<h3>sample#2</h3> 
<p>Aenean commodo ligula eget dolor. Aenean massa.</p> 
<img> 
<table> 
</table>" 

т.д.

У меня нет никаких проблем с включением что-то в файлах сервера, если это необходимо, но предпочтительно не.

+0

Если вы знаете, все возможности, как страница может выглядеть, вы можете использовать регулярное выражение для извлечения именно вам данные во всех случаях ... –

ответ

5

Если страницы действительно выглядят как ваш пример, вы можете попробовать простой preg_match_all(). Если структура некоторых страниц отличается от вашего примера, вы можете настроить свое регулярное выражение. Here - хороший сайт для проверки функции.

$html = '<h3>sample#1</h3> 
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> 
<img> 
<table> 
</table> 

<h3>sample#2</h3> 
<p>Aenean commodo ligula eget dolor. Aenean massa.</p> 
<img> 
<table> 
</table> 

<h3>sample#3</h3> 
<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> 
<img> 
<table> 
</table> 

<h3>sample#4</h3> 
<p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.</p> 
<img> 
<table> 
</table>'; 


$matches = array(); 
$elements = array(); 

preg_match_all("#<h3>.*?</table>#s" , $html, $matches); 

if(count($matches[0]) > 1) { 
    $elements = $matches[0]; 
} 

echo "<pre>"; 
var_dump($elements); 

ВЫВОД:

array(4) { 
    [0]=> 
    string(105) "<h3>sample#1</h3> 
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> 
<img> 
<table> 
</table>" 
    [1]=> 
    string(95) "<h3>sample#2</h3> 
<p>Aenean commodo ligula eget dolor. Aenean massa.</p> 
<img> 
<table> 
</table>" 
    [2]=> 
    string(133) "<h3>sample#3</h3> 
<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> 
<img> 
<table> 
</table>" 
    [3]=> 
    string(116) "<h3>sample#4</h3> 
<p>Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.</p> 
<img> 
<table> 
</table>" 
} 
+0

Это работало для меня, спасибо – FlorisdG

+0

, пожалуйста, я только что отредактировал ответ и добавил ссылку, где вы можете протестировать, если некоторые страницы отличаются от вашего примера – swidmann

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