Я использую функцию strip_tags, чтобы получить только необходимый контент, но он получает все данные по ссылке
см. пример кода ниже, который я использую для извлечения контента по ссылке:
<?php
$a=fopen("http://example.com/","r");
$contents=stream_get_contents($a);
fclose($a);
$contents1=strtolower($contents);
$start='<div id="content">';
$start_pos=strpos($contents1,$start);
$first_trim=substr($contents1,$start_pos);
$stop='</div><!-- content -->';
$stop_pos=strpos($first_trim,$stop);
$second_trim=substr($first_trim,0,$stop_pos+6);
$second_trim = strip_tags($second_trim, '<div><table><tbody><tr><td><a><h2><h4>');
echo "<div>$second_trim</div>";
?>
Вот HTML-код, извлеченный в $ second_trim:
<div><div id="content">
<div id="issuedescription"></div>
<h2 class="wsite-content-title" style="text-align:center;">download content<br /><font color="#f30519">table of content</font><br /> <font color="#f80117"> content </font></h2>
<h2>table of contents</h2>
<h4 class="tocsectiontitle">editorial</h4>
<h2 class="wsite-content-title" style="text-align:left;">technical note</h2>
<table class="tocarticle" width="100%">
<tr valign="top">
<td class="toctitle" width="95%" align="left"><a href="http://example.com/">where are we at and where are we heading to?</a> </td>
<td class="tocgalleys" width="5%" align="left">
<a href="http://example.com/" class="file">pdf</a>
</td>
</tr>
<tr>
<td class="tocauthors" width="95%" align="left">
sergio eduardo de paiva gonã§alves </td>
<td class="tocpages" width="5%" align="left">1-2</td>
</tr>
</table>
<div class="separator"></div>
h4 class="tocsectiontitle">some text here</h4>
<table class="tocarticle" width="100%">
<tr valign="top">
<td class="toctitle" width="95%" align="left"><a href="http://example.com/">some text here</a></td>
<td class="tocgalleys" width="5%" align="left">
<a href="http://example.com/" class="file">pdf</a>
</td>
</tr>
<tr>
<td class="tocauthors" width="95%" align="left">
some text here, some text here, some text here, some text here, some text here, some text here </td>
<td class="tocpages" width="5%" align="left">3-10</td>
</tr>
</table>
<a target="_blank" rel="license" href="http://example.com/">
</a>
some text here<a rel="license" target="_blank" href="http://example.com/">example</a>.
</div></div>
Теперь моя проблема в том, что я хочу получить только конкретный тег из всего содержимого, например 2-й привязки, из двух приведенных ниже, используя функцию strip_tag.
<a href="http://example.com/" class="file">pdf</a>
<a href="http://example.com/">some text here</a>
и второй заголовочный тег из двух приведенных ниже:
<h2 class="wsite-content-title" style="text-align:center;">download content<br /><font color="#f30519">table of content</font><br /> <font color="#f80117"> content </font></h2>
<h2>table of contents</h2>
но функция раздевания тега либо извлекает все из них, либо ни одного из них, так как я могу сделать так, чтобы они идентифицировали себя для извлечения нужного тега вместо извлечения всех похожих тегов. Если это лучший способ сделать это, поделитесь своими идеями здесь !!
Регулярное выражение может сделать такую вещь:
function handle_link($data) {
list($link, $attributes, $content) = $data;
$classes = preg_match('#class=[\'"]([^\'"]+)[\'"]#', $attributes, $match) ? preg_split('#\s+#', $match[1]) : array();
// If the link has the "file" class
if(in_array('file', $classes)) {
return $content; // only the internal content (like strip_tags would do)
// or you can return a new link:
// return '<a href="myfile" class="myclass">' . $content . '</a>';
} else {
return $link; // all the link not filtered
}
}
$second_trim = strip_tags($second_trim, '<div><table><tbody><tr><td><h2><h4>');
$second_trim = preg_replace_callback('#<a([^>]*)>(.+)</a>#U', 'handle_link', $second_trim);
Других решений пока нет …