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 相关文章推荐
js之WEB开发调试利器:Firebug 下载
Jan 13 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
实现变速回到顶部的JavaScript代码
May 09 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
js简单倒计时实现代码
Apr 30 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
Vue-Router进阶之滚动行为详解
Sep 13 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
Dec 20 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 Javascript
在vue中使用防抖函数组件操作
Jul 26 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
高一家长会邀请函
2014/01/12 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
预备党员承诺书
2014/03/25 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
小学班主任工作随笔
2015/08/15 职场文书
学前班教学反思
2016/02/24 职场文书