diff --git a/libs/Smarty_Compiler.class.php b/libs/Smarty_Compiler.class.php index 6fee26e0..30f9ff55 100644 --- a/libs/Smarty_Compiler.class.php +++ b/libs/Smarty_Compiler.class.php @@ -241,7 +241,7 @@ class Smarty_Compiler extends Smarty { $rdq = preg_quote($this->right_delimiter, '~'); /* un-hide hidden xml open tags */ - $source_content = preg_replace("~<({$ldq}(.*?){$rdq})[?]~s", '< \\1', $source_content); + $source_content = preg_replace("~<({$ldq}(.*?){$rdq}\?)~s", '< \\1', $source_content); // run template source through prefilter functions if (count($this->_plugins['prefilter']) > 0) { @@ -353,15 +353,26 @@ class Smarty_Compiler extends Smarty { } $compiled_content = ''; + $tmp_id = '{'.md5(uniqid(rand(), true)).'}'; + /* Interleave the compiled contents and text blocks to get the final result. */ for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) { if ($compiled_tags[$i] == '') { // tag result empty, remove first newline from following text block $text_blocks[$i+1] = preg_replace('~^(\r\n|\r|\n)~', '', $text_blocks[$i+1]); } + // replace legit PHP tags with placeholder + $text_blocks[$i] = str_replace('\n",$compiled_content); + // unescape legit tags + $compiled_content = str_replace($tmp_id,'_cache_serials['".$this->_cache_include."'] = '".$this->_cache_serial."'; ?>" . $compiled_content; } +/* // remove unnecessary close/open tags $compiled_content = preg_replace('~\?>\n?<\?php~', '', $compiled_content); - +*/ + // run compiled template through postfilter functions if (count($this->_plugins['postfilter']) > 0) { foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) {