cvs: smarty /libs Smarty_Compiler.class.php
"Monte Ohrt" <[email protected]> Fri, 23 Feb 2007 14:24:10 -0000
| Newsgroups | gmane.comp.php.cvs.smarty |
|---|---|
| Message-ID | <cvsmohrt1172240650@cvsserver> |
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) {
--
Smarty CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php