使用php剥离html标签

时间:2010-12-09 07:26:29

标签: php strip-tags

除了预标签内的内容

之外,我如何去除html标签

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

    Notes


    </div>


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

    </pre>
";

使用strip_tags($ content,'')时,pre标签内的html也被剥离了。但我不希望html里面被剥离

7 个答案:

答案 0 :(得分:2)

尝试:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可以执行以下操作:

  1. 使用preg_replace和'e'修饰符将pre标签的内容替换为@@@ 1 @@@,@@@ 2 @@@等字符串,同时将此内容存储在某个数组中
  2. 运行strip_tags()
  3. 再次使用'e'修饰符运行preg_relace,将@@@ 1 @@@等恢复为原始内容。
  4. 有点kludgy但应该工作。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

好吧!你只留下一个选择:正则表达式...没有人喜欢他们,但他们确实完成了工作。首先,用一些奇怪的东西替换有问题的文本,如:

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

这将有效地改变你的

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

其他内容,然后调用

strip_tags($content);

之后,您只需替换|| k ||(或您选择的任何内容)中的原始值,即可获得所需的结果。

答案 5 :(得分:0)

我认为你的内容并没有很好地保存在$ content变量

你可以通过将内部双引号转换为单引号来检查一次

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

    Notes


    </div>


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

    </pre>
";


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

答案 6 :(得分:0)

您可以执行以下操作:

将preg_replace与'e'修饰符一起使用,将pre标记的内容替换为@@@1@@@@@@2@@@等字符串,同时将此内容存储在某些数组中 运行strip_tags()

再次使用'e'修饰符运行preg_relace,将@@@1@@@等恢复为原始内容。

有点kludgy但应该工作。

请你写完整的代码。我明白了,但出了点问题。请编写完整的编程代码