phpcms模板解析嵌套标签解析失败
2015-04-09 17:04
225 查看
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);
这时输出的是
我们上面的例子之所以会出现那个结果,是因为在遇到第一个右大括号}时,没有把它当做结尾,而是继续向后读取.
知道原因后,就容易修改了
在正则中加一个问号?,用来表示非贪婪读取,在读到第一个右大括号时,就结束.
本文出自 “程序员的糜烂生活” 博客,请务必保留此出处http://houguang.blog.51cto.com/3926483/1630627
我把这个文件拿出来,然后在下面直接写上
$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
相关文章推荐
- ThinkPHP模板标签解析失败&不解析的问题解决(尤其当value为负值或小数时)
- phpcms ——模板标签使用说明
- PHPCMS 模板标签
- phpcms模板标签整理
- PHPCMS标签:PC标签模板语法规则
- dedecms自定义表单解析DEDE标签方法并共用默认头尾模板(原创)
- ASP支持嵌套模板和循环标签的模板类
- phpcms 模板常用标签指南
- phpcms 标签解析
- PHPCMS 模板制作标签
- discuz 模板标签解析
- PHPCMS 2008中tag内容标签的解析过程
- phpcms-v9】前台模板文件中{pc}标签的执行流程
- 【phpcms-v9】前台模板文件中{pc}标签的执行流程
- phpcms-v9】前台模板文件中{pc}标签的执行流程
- ThinkPHP2.1 增加PHPCMS模板引擎,支持PC标签(get,json)
- 【phpcms-v9】index.php文件分析-前台首页模板文件的解析过程分析
- PHPCMS 标签与解析小记_Jason
- PHPCMS部分模板标签的使用介绍