cvs: smarty /libs Smarty_Compiler.class.php

From: Date: Fri, 23 Feb 2007 14:24:10 +0000
Subject: cvs: smarty /libs Smarty_Compiler.class.php
Groups: php.smarty.cvs 
Request: Send a blank email to php-smarty-cvs+get-2201@lists.php.net to get a copy of this message
mohrt Fri Feb 23 14:24:10 2007 UTC Modified files: /smarty/libs Smarty_Compiler.class.php Log: fix problem with php open tags generated from tag interleaving http://cvs.php.net/viewvc.cgi/smarty/libs/Smarty_Compiler.class.php?r1=1.387&r2=1.388&diff_format=u Index: smarty/libs/Smarty_Compiler.class.php diff -u smarty/libs/Smarty_Compiler.class.php:1.387 smarty/libs/Smarty_Compiler.class.php:1.388 --- smarty/libs/Smarty_Compiler.class.php:1.387 Fri Dec 1 15:40:05 2006 +++ smarty/libs/Smarty_Compiler.class.php Fri Feb 23 14:24:10 2007 @@ -26,7 +26,7 @@ * @package Smarty */ -/* $Id: Smarty_Compiler.class.php,v 1.387 2006/12/01 15:40:05 mohrt Exp $ */ +/* $Id: Smarty_Compiler.class.php,v 1.388 2007/02/23 14:24:10 mohrt Exp $ */ /** * Template compiling class @@ -241,7 +241,7 @@ $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 @@ } $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('<?',$tmp_id,$text_blocks[$i]); + $compiled_tags[$i] = str_replace('<?',$tmp_id,$compiled_tags[$i]); + $compiled_content .= $text_blocks[$i].$compiled_tags[$i]; } $compiled_content .= $text_blocks[$i]; + + // escape created php tags + $compiled_content = str_replace('<?',"<?php echo '<?' ?>\n",$compiled_content); + // unescape legit tags + $compiled_content = str_replace($tmp_id,'<?',$compiled_content); // remove \n from the end of the file, if any if (strlen($compiled_content) && (substr($compiled_content, -1) == "\n") ) { @@ -372,9 +383,11 @@ $compiled_content = "<?php \$this->_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) {

« previous php.smarty.cvs (#2201) next »