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 相关文章推荐
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
jquery easyui的tabs使用时的问题
Mar 23 Javascript
获取3个数组不重复的值的具体实现
Dec 30 Javascript
json的定义、标准格式及json字符串检验
May 11 Javascript
javascript事件委托的方式绑定详解
Jun 10 Javascript
JavaScript toUpperCase()方法使用详解
Aug 26 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
Dec 06 Javascript
一道面试题引发的对javascript类型转换的思考
Mar 06 Javascript
AngularJS中$http使用的简单介绍
Mar 17 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
vue-cli3 karma单元测试的实现
Jan 18 Javascript
Layui给switch添加响应事件的例子
Sep 03 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
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
node.js中的require使用详解
2014/12/15 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
深入分析jQuery.one() 函数
2020/06/03 jQuery
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Python中几种导入模块的方式总结
2017/04/27 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
锦旗赠语
2015/06/23 职场文书
自荐信范文
2019/05/20 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript