Удаление HTML-тегов с помощью php - PullRequest
1 голос
/ 09 декабря 2010

Как я могу удалить тег HTML, кроме содержимого внутри предварительного тега

код

<code>$content="
    <div id="wrapper">

    Notes


    </div>


    <pre>
    <div id="loginfos">asdasd</div>

    
«;

При использовании strip_tags ($ content, '') html внутри тега pre слишком лишен. но я не хочу, чтобы HTML внутри предварительно скинули

Ответы [ 7 ]

2 голосов
/ 09 декабря 2010

Попробуйте:

echo strip_tags($text, '<pre>');
1 голос
/ 03 июля 2013
$text = 'YOUR CODE HERE';

$org_text = $text;

// hide content within pre tags
$text = preg_replace( '/(<pre[^>]*>)(.*?)(<\/pre>)/is', '$1@@@pre@@@$3', $text );
// filter content
$text = strip_tags( $text, '<pre>' );
// insert back content of pre tags
if ( preg_match_all( '/(<pre[^>]*>)(.*?)(<\/pre>)/is', $org_text, $parts ) ) {
    foreach ( $parts[2] as $code ) {
        $text = preg_replace( '/@@@pre@@@/', $code, $text, 1 );
    }
}

print_r( $text );
1 голос
/ 09 декабря 2010

Вы можете сделать следующее:

  1. Используйте preg_replace с модификатором 'e', ​​чтобы заменить содержимое тегов pre некоторыми строками, такими как @@@ 1 @@@, @@@ 2 @@@ и т. Д., Сохраняя это содержимое в некотором массиве
  2. Запустить strip_tags ()
  3. Запустите preg_relace с модификатором 'e', ​​чтобы восстановить @@@ 1 @@@ и т. Д. В исходное содержимое.

Немного глупо, но должно работать.

1 голос
/ 09 декабря 2010
 <?php 
                    $document=html_entity_decode($content);
                    $search = array ("'<script[^>]*?>.*?</script>'si","'<[/!]*?[^<>]*?>'si","'([rn])[s]+'","'&(quot|#34);'i","'&(amp|#38);'i","'&(lt|#60);'i","'&(gt|#62);'i","'&(nbsp|#160);'i","'&(iexcl|#161);'i","'&(cent|#162);'i","'&(pound|#163);'i","'&(copy|#169);'i","'&#(d+);'e");
                    $replace = array ("","","\1","\"","&","<",">"," ",chr(161),chr(162),chr(163),chr(169),"chr(\1)");
                    $text = preg_replace($search, $replace, $document); 
                    echo $text;
                    ?>
0 голосов
/ 23 декабря 2015

Вы можете сделать следующее:

Используйте preg_replace с модификатором 'e' для замены содержимого предварительных тегов некоторыми строками, такими как @@@1@@@, @@@2@@@ и т. Д., При сохранении этого содержимого в некотором массиве Выполнить strip_tags()

Запустите preg_relace с модификатором 'e', чтобы восстановить @@@1@@@ и т. Д. В исходное содержимое.

Немного клёвый, но должен работать.

Не могли бы вы написать полный код. Я понял, но что-то идет не так. Пожалуйста, напишите полный программный код

0 голосов
/ 09 декабря 2010

Я думаю, что ваш контент не очень хорошо хранится в переменной $ content

Можете ли вы проверить один раз, преобразовав внутренние двойные кавычки в одинарные

<code>$content="
    <div id='wrapper'>

    Notes


    </div>


    <pre>
    <div id='loginfos'>asdasd</div>

    
«; strip_tags ($ content, '
');
</code>
0 голосов
/ 09 декабря 2010

Хорошо! Вы не оставляете ничего, кроме одного выбора: регулярных выражений ... Никто не любит их, но они, безусловно, справятся со своей работой. Сначала замените проблемный текст чем-нибудь странным, например так:

<code>preg_replace("#<pre>(.+?)
# "," || k || ", $ content);

Это эффективно изменит ваше

<code><pre> blah, blah, bllah....

для чего-то другого, а затем позвоните

strip_tags($content);

После этого вы можете просто заменить исходное значение в || k || (или что бы вы ни выбрали), и вы получите желаемый результат.

...