стрип-тэги — как получить необходимый контент, используя функцию strip_tags в Stack Overflow

Я использую функцию 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 />&nbsp;<font color="#f80117"> content&nbsp;</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 />&nbsp;<font color="#f80117"> content&nbsp;</font></h2>

<h2>table of contents</h2>

но функция раздевания тега либо извлекает все из них, либо ни одного из них, так как я могу сделать так, чтобы они идентифицировали себя для извлечения нужного тега вместо извлечения всех похожих тегов. Если это лучший способ сделать это, поделитесь своими идеями здесь !!

0

Решение

Регулярное выражение может сделать такую ​​вещь:

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]