php preg_replace有例外

时间:2013-02-28 20:01:08

标签: php

我有一个带有一些tekst丰富的字符串,其中有<b><em>以及字符串中的其他一些html标签。当然,用户也可以将<script>或其他stuf放入字符串中,但这不是您想要的。我想将<>替换为&lt;&gt;,而不是<b><em>

3 个答案:

答案 0 :(得分:1)

看起来你想要一个负向前瞻:

$escaped = preg_replace("(</?(?!(?:b|em)\b))","&lt;",$raw);

请注意,您无需将>转义为&gt;,因为它本身没有任何意义。

答案 1 :(得分:1)

测试这个

  $notecomments=" <b> <em> <sf> <script>";
  $output=preg_replace_callback(array("#<(.*?)>#"),function($matches){
switch($matches[1]){
    case 'b':
    case 'em':
      return $matches[0];
    break;
    default:
      return "&lt;".$matches[1]."&gt;";

}
},' '.$notecomments.' ');
  print_r($output);

输出:

   <b> <em> &lt;sf&gt; &lt;script&gt; 

答案 2 :(得分:0)

或许strip_tags更适合这个:

echo strip_tags($text, '<b><em>');