Fix #2829
diff --git a/system/core/Security.php b/system/core/Security.php
index 0944fef..4c01da2 100644
--- a/system/core/Security.php
+++ b/system/core/Security.php
@@ -551,13 +551,13 @@
 
 		do
 		{
-			$matches = $matches1 = 0;
+			$m1 = $m2 = 0;
 
-			$str = preg_replace('~(&#x0*[0-9a-f]{2,5});?~iS', '$1;', $str, -1, $matches);
-			$str = preg_replace('~(&#\d{2,4});?~S', '$1;', $str, -1, $matches1);
+			$str = preg_replace('/(&#x0*[0-9a-f]{2,5})(?![0-9a-f;])/iS', '$1;', $str, -1, $m1);
+			$str = preg_replace('/(&#\d{2,4})(?![0-9;])/S', '$1;', $str, -1, $m2);
 			$str = html_entity_decode($str, ENT_COMPAT, $charset);
 		}
-		while ($matches OR $matches1);
+		while ($m1 OR $m2);
 
 		return $str;
 	}