Fixed a bug affecting some locales where word censoring would not work on words beginning or ending with an accented character.
diff --git a/system/helpers/text_helper.php b/system/helpers/text_helper.php
index 6e61f77..e79a241 100644
--- a/system/helpers/text_helper.php
+++ b/system/helpers/text_helper.php
@@ -230,21 +230,28 @@
 		{
 			return $str;
 		}
+        
+        $str = ' '.$str.' ';
 
-		$str = ' '.$str.' ';
+		// \w, \b and a few others do not match on a unicode character
+		// set for performance reasons. As a result words like über
+		// will not match on a word boundary. Instead, we'll assume that
+		// a bad word will be bookeneded by any of these characters.
+		$delim = '[-_\'\"`(){}<>\[\]|!?@#%&,.:;^~*+=\/ 0-9\n\r\t]';
+
 		foreach ($censored as $badword)
 		{
 			if ($replacement != '')
 			{
-				$str = preg_replace("/\b(".str_replace('\*', '\w*?', preg_quote($badword, '/')).")\b/i", $replacement, $str);
+				$str = preg_replace("/({$delim})(".str_replace('\*', '\w*?', preg_quote($badword, '/')).")({$delim})/i", "\\1{$replacement}\\3", $str);
 			}
 			else
 			{
-				$str = preg_replace("/\b(".str_replace('\*', '\w*?', preg_quote($badword, '/')).")\b/ie", "str_repeat('#', strlen('\\1'))", $str);
+				$str = preg_replace("/({$delim})(".str_replace('\*', '\w*?', preg_quote($badword, '/')).")({$delim})/ie", "'\\1'.str_repeat('#', strlen('\\2')).'\\3'", $str);
 			}
 		}
-	
-		return trim($str);
+
+        return trim($str);
 	}
 }