PHP - 正则表达式,删除字体标记

时间:2010-08-16 07:36:46

标签: php regex

有人可以告诉我为什么这不起作用吗?

$str = preg_replace("<font[^>]*>", '', $str);

CMS适用于Flash,现在客户端想要实现一个html网站。需要删除邪恶的内联字体标记以显示默认样式。

4 个答案:

答案 0 :(得分:3)

你也可以试试这个。

$str = preg_replace('/(<font[^>]*>)|(<\/font>)/', '', $str);

答案 1 :(得分:0)

如果你想使用preg_replace看一下这个函数 (在此链接中,您将发现许多功能:http://php.net/manual/en/function.strip-tags.php

这里支持剥离反向strip_tags函数的内容:

<?php
function strip_only($str, $tags, $stripContent = false) {
    $content = '';
    if(!is_array($tags)) {
        $tags = (strpos($str, '>') !== false ? explode('>', str_replace('<', '', $tags)) : array($tags));
        if(end($tags) == '') array_pop($tags);
    }
    foreach($tags as $tag) {
        if ($stripContent)
             $content = '(.+</'.$tag.'[^>]*>|)';
         $str = preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is', '', $str);
    }
    return $str;
}

$str = '<font color="red">red</font> text';
$tags = 'font';
$a = strip_only($str, $tags); // red text
$b = strip_only($str, $tags, true); // text
?> 

答案 2 :(得分:0)

您的模式上没有任何分隔符。这应该有效:

$str = preg_replace('/<font[^>]*>/', '', $str);

强制性“不要使用正则表达式来解析HTML”。

答案 3 :(得分:0)

#<font[^>]*>#

那里的分隔符怎么样?分隔符是#。

  

“分隔符可以是任何非字母数字,非反斜杠,非空白字符。” php.net