1

除了pre标签内的内容,我如何去除html标签

代码

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

    Notes


    </div>


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

    </pre>
";

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

4

7 回答 7

2

尝试 :

echo strip_tags($text, '<pre>');
于 2010-12-09T07:34:05.297 回答
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;
                    ?>
于 2010-12-09T07:31:50.227 回答
1

您可以执行以下操作:

  1. 使用带有 'e' 修饰符的 preg_replace 将 pre 标记的内容替换为一些字符串,如 @@@1@@@、@@@2@@@ 等,同时将这些内容存储在某个数组中
  2. 运行 strip_tags()
  3. 再次运行带有 'e' 修饰符的 preg_relace 以将 @@@1@@@ 等恢复为原始内容。

有点笨拙,但应该可以。

于 2010-12-09T07:38:08.450 回答
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 );
于 2013-07-03T11:09:48.250 回答
0

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

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

这将有效地改变你的

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

别的东西,然后打电话

strip_tags($content);

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

于 2010-12-09T07:35:53.600 回答
0

我认为您的内容没有很好地存储在 $content 变量中

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

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

    Notes


    </div>


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

    </pre>
";


strip_tags($content, '<pre>');
于 2010-12-09T07:36:14.380 回答
0

您可以执行以下操作:

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

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

有点笨拙,但应该可以。

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

于 2015-12-23T18:41:29.660 回答