Index: wordfilter.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/wordfilter/wordfilter.module,v
retrieving revision 1.7.2.20
diff -b -u -p -r1.7.2.20 wordfilter.module
--- wordfilter.module	5 Jun 2009 07:59:19 -0000	1.7.2.20
+++ wordfilter.module	5 Jun 2009 09:07:46 -0000
@@ -342,10 +342,31 @@ function wordfilter_filter_process($text
       $replacement = ($word->replacement) ? $word->replacement : variable_get('wordfilter_default_replacement', '[filtered word]');
       
       if ($word->standalone) {
-        $text = preg_replace("/(\W)". preg_quote($word->words, '/') ."(\W)/i". ($utf8 ? 'u' : ''), "$1". $replacement ."$2", $text);
+        $pattern = '/(\W)'. preg_quote($word->words, '/') .'(\W)/i';
       }
       else {
-        $text = preg_replace('/'. preg_quote($word->words, '/') .'/i'. ($utf8 ? 'u' : ''), $replacement, $text);
+        $pattern = '/'. preg_quote($word->words, '/') .'/i';
+      }
+      if ($utf8) {
+        $pattern .= 'u';
+      }
+
+      $split_text = preg_split('/(<[^>]*>)/i', substr($text, 1, -1), -1, PREG_SPLIT_DELIM_CAPTURE);
+      $split_text = array_values(array_filter($split_text));
+      if (count($split_text) > 1) {
+        $new_string = '';
+        foreach ($split_text as $part) {
+          if (!preg_match('/^</', $part)) {
+            $new_string .= preg_replace($pattern, $replacement, $part);
+          }
+          else {
+            $new_string .= $part;
+          }
+        }
+        $text = ' '. $new_string .' ';
+      }
+      else {
+        $text = preg_replace($pattern, $replacement, $text);
       }
     }
   }
