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 相关文章推荐
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
javascript学习笔记(一) 在html中使用javascript
Jun 18 Javascript
jquery获取一组checkbox的值(实例代码)
Nov 04 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
Sep 08 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
使用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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
爱岗敬业演讲稿范文
2014/01/14 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
关于教师节的广播稿
2014/09/10 职场文书
公司租房协议书范本
2014/10/08 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
广告业务员岗位职责
2015/02/13 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS