diff options
Diffstat (limited to 'phpBB/includes/bbcode.php')
-rw-r--r-- | phpBB/includes/bbcode.php | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index 70e1698efc..c34092f35c 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -312,18 +312,18 @@ class bbcode switch ($type) { case 'php': + $str_from = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}', '.', '@'); + $str_to = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}', '.', '@'); + + $code = str_replace($str_to, $str_from, $code); + $remove_tags = FALSE; - if (!preg_match('/<\?(php)? .*? \?>/', $code)) + if (!preg_match('/\<\?.*?\?\>/is', $code)) { $remove_tags = TRUE; $code = "<?php $code ?>"; } - $str_from = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}', '.', '@'); - $str_to = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}', '.', '@'); - - $code = str_replace($str_to, $str_from, $code); - ob_start(); highlight_string($code); $code = ob_get_contents(); @@ -331,10 +331,12 @@ class bbcode if ($remove_tags) { - $code = preg_replace('/(.*?)<\?php (.*)\?>(.*?)/', '\1\2\3', $code); + $code = preg_replace('!^<code>[\n\r\s\t]*<font color="#[a-z0-9]+">[\n\r\s\t]*(<font color="#[a-z0-9]+">)<\?php (.*)\?></font>[\n\r\s\t]*(</font>)[\n\r\s\t]*</code>[\n\r\s\t]*!is', '\1\2\3', $code); + } + else + { + $code = preg_replace('!^<code>[\n\r\s\t]*<font color="#[a-z0-9]+">[\n\r\s\t]*(.*)</font>[\n\r\s\t]*</code>[\n\r\s\t]*!is', '\1', $code); } - - $code = preg_replace('!^<code>[\n\r\s\t]*<font color="#[a-z0-9]+">[\n\r\s\t]*(.*)</font>[\n\r\s\t]*</code>[\n\r\s\t]*!is', '\\1', $code); break; default: |