Thinkphp模板没有解析直接原样输出的解决方法


Posted in Javascript onOctober 31, 2014

本文实例讲述了Thinkphp模板没有解析直接原样输出的解决方法。分享给大家供大家参考。具体如下:

一、问题:

最近在学习thinkphp模板了,但是发现模板页原样出来了,经过一番艰苦搜索终于找到解决方案。

二、解决方法:

很多人都碰到相同问题,在变量中赋值的字符串中包含的__ROOT__、__PUBLIC__、__APP__,这种字符的, 在模板中display出来的时候都被替换成了真实路径。话说是在写Timi文件管理系统的时候发现的这个问题。

从文件中把源码读出来输出到页面后发现,只要是TP的路径字符,都被替换成了真实路径。
比如:

$this->assign('fileContent',$fileContent);//$fileContent中包含__PUBLIC__“路径常量”字符。

 
页面输出后显示为真实路径/public/。
期间经过了多种尝试,比如assign的时候base64加密,模板输出的时候decode一下,发现没起作用。最后终于忍不住的看了下Tp这块的源码,发现在display方法的最后一步的时候通过调用tag方法把“Tp的路径常量”替换成真实路径的。在render方法之前都是正常的。

Thinkphp模板没有解析直接原样输出的解决方法

本来准备改下源码实现下面这位童鞋的需求方案的:
老大、这是临时解决方案还是最终方案?
不过我感觉在assign()方法里面加个判断还不错,
如果是$this->assign('','',false),则对内容不替换,原样输出。

结果,看完这块源码后才发现,不是那么容易,改动太大了。

最后另一位童鞋的回复,点出了最终解决方案:

“可以参考这里的内容:https://3water.com/article/54217.htm(模板替换)
 
有了模板替换规则后,页面上所有的__PUBLIC__ 字符串都会被替换,那如果确实需要输出__PUBLIC__ 字符串到模板呢,我们可以通过增加替换规则的方式,例如:

'TMPL_PARSE_STRING'  =>array(

         '--PUBLIC--' => '__PUBLIC__', // 采用新规则输出/Public字符串

)

这样增加替换规则后,如果我们要输出__PUBLIC__ 字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。

这样增加替换规则后,如果我们要输出__PUBLIC__ 字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。

于是乎,方案出炉:

在Tp的配置文件config.php中配置

'TMPL_PARSE_STRING' => array (//路径配置

       

        //Timi文件路径还原

        '--PUBLIC--' => '__PUBLIC__',

        '--APP--' => '__APP__',

        '--URL--' => '__URL__',

        '--ACTION--' => '__ACTION__',

        '--SELF--' => '__SELF__',

        '--INFO--' => '__INFO__',

        '--EXT--' => '__EXT__'

),

读出源码的时候正则替换一下“路径常量字符”__ROOT__为--ROOT--:
$fileContent=file_get_contents($filePath); 

$fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

然后TMPL_PARSE_STRING的配置在模板被解析的时候刚好替换回去,如下图所示:

Thinkphp模板没有解析直接原样输出的解决方法

于是乎,这个问题就“暂时”“完美”解决了。

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

Javascript 相关文章推荐
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
jquery CSS选择器笔记
Mar 29 Javascript
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
JavaScript的作用域和块级作用域概念理解
Sep 21 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 Javascript
javascript操作cookie
Jan 17 Javascript
小程序中canvas的drawImage方法参数使用详解
Jul 04 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
Oct 09 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 #Javascript
JsRender实用入门教程
Oct 31 #Javascript
JsRender for object语法简介
Oct 31 #Javascript
JsRender for index循环索引用法详解
Oct 31 #Javascript
javascript常用函数归纳整理
Oct 31 #Javascript
让html页面不缓存js的实现方法
Oct 31 #Javascript
js读取cookie方法总结
Oct 31 #Javascript
You might like
MySQL相关说明
2007/01/15 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
PHP微信支付开发实例
2016/06/22 PHP
PHPMailer发送邮件
2016/12/28 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
js中this的用法实例分析
2015/01/10 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
python 重定向获取真实url的方法
2018/05/11 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
django基础学习之send_mail功能
2019/08/07 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
酒店员工职业生涯规划
2014/02/25 职场文书
《穷人》教学反思
2014/04/08 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers