Я использую функцию strip_tags для извлечения только необходимого содержимого, но он извлекает все данные из ссылки, см. Пример кода ниже im, используя для извлечения контента из ссылки:
<?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>
но функция тега strip либо извлекает их из них, либо ни один из них. Так как я могу заставить их идентифицировать, чтобы получить тег, который я хочу, вместо того, чтобы извлекать все похожие теги. Если это лучший способ сделать это, поделитесь своими идеями здесь !!
Регулярное выражение может сделать следующее:
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);
$second_trim =
отсутствует в конце.