как получить необходимый контент, используя функцию strip_tags в php

0

Я использую функцию 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 />&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>

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

Теги:
strip-tags

1 ответ

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
    Спасибо за ответ г-н. KyleK Я запускаю ваш код, но он дает синтаксическую ошибку :: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_CONSTANT_ENCAPSED_STRING в 3-й строке вашего кода в переменной & classes. но я думаю, что это правильная концепция для моего вопроса. Можете ли вы проверить его еще раз, чтобы получить более точный код.
  • 0
    Кавычки в кавычках не избежали. И я добавил $second_trim = отсутствует в конце.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню