Stripping html tags using php

霸气de小男生 提交于 2019-12-13 18:59:21

问题


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



来源:https://stackoverflow.com/questions/4395868/stripping-html-tags-using-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!