码迷,mamicode.com
首页 > Web开发 > 详细

phpcms模板解析嵌套标签解析失败

时间:2015-04-09 20:06:24      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:phpcms模板解析嵌套标签解析失败

PHPCMS的模板解析函数是/phpcms/libs/classes/template_cache.class.php这个类中的template_parse函数.

我把这个文件拿出来,然后在下面直接写上

$str = ‘{php echo 1} -- {$abc}‘;
$template = new template_cache();
echo $c = $template->template_parse($str);

这时输出的是

<?php defined(‘IN_PHPCMS‘) or exit(‘No permission resources.‘); ?><?php echo 1} -- {$abc?>

不出所料,解析出的代码,出现了语法错误,我们 想要的结果应该是

<?php echo 1?> -- <?php echo $abc?>

下面开始找问题,在函数template_parse的第3行,是用来解析php开头的模板语法的

$str = preg_replace ( "/\{php\s+(.+)\}/", "<?php \\1?>", $str );

这里可以看出,解析的方式是找到{php后面所有的内容,直到另一半大括号},这之间的内容,全部放到<?php 和?>之间.

我们上面的例子之所以会出现那个结果,是因为在遇到第一个右大括号}时,没有把它当做结尾,而是继续向后读取.

知道原因后,就容易修改了

在正则中加一个问号?,用来表示非贪婪读取,在读到第一个右大括号时,就结束.

$str = preg_replace ( "/\{php\s+(.+?)\}/", "<?php \\1?>", $str );


本文出自 “程序员的糜烂生活” 博客,请务必保留此出处http://houguang.blog.51cto.com/3926483/1630627

phpcms模板解析嵌套标签解析失败

标签:phpcms模板解析嵌套标签解析失败

原文地址:http://houguang.blog.51cto.com/3926483/1630627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!