Stripping html tags using php

2019-08-02 20:47发布

问题:

How can i strip html tag except the content inside the pre tag

code

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

    Notes


    </div>


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

    </pre>
";

While using strip_tags($content,'') the html inside the pre tag too stripped of. but i don't want the html inside pre stripped off

回答1:

You may do the following:

  1. Use preg_replace with 'e' modifier to replace contents of pre tags with some strings like @@@1@@@, @@@2@@@, etc. while storing this contents in some array
  2. Run strip_tags()
  3. Run preg_relace with 'e' modifier again to restore @@@1@@@, etc. into original contents.

A bit kludgy but should work.



回答2:

Try :

echo strip_tags($text, '<pre>');


回答3:

 <?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;
                    ?>


回答4:

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


回答5:

Ok!, you leave nothing but one choice: Regular Expressions... Nobody likes 'em, but they sure get the job done. First, replace the problematic text with something weird, like this:

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

This will effectively change your

<pre> blah, blah, bllah....</pre>

for something else, and then call

strip_tags($content);

After that, you can just replace the original value in ||k||(or whatever you choose) and you'll get the desired result.



回答6:

I think your content is not stored very well in the $content variable

could you check once by converting inner double quotes to single quotes

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

    Notes


    </div>


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

    </pre>
";


strip_tags($content, '<pre>');


回答7:

You may do the following:

Use preg_replace with 'e' modifier to replace contents of pre tags with some strings like @@@1@@@, @@@2@@@, etc. while storing this contents in some array Run strip_tags()

Run preg_relace with 'e' modifier again to restore @@@1@@@, etc. into original contents.

A bit kludgy but should work.

Could you please write full code. I understood, but something goes wrong. Please write full programming code