Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

class_template.php正则匹配问题.dz3/2.5,dz7都存在

[复制链接]
mark35 发表于 2013-9-19 20:53:58 | 显示全部楼层 |阅读模式
本帖最后由 mark35 于 2013-9-19 20:55 编辑

DZ7.2: include/template.func.php line42

  1.     $template = preg_replace("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/ies", "loadcsstemplate('\\1')", $template);
复制代码
DZ3: source/class/class_template.php line62
DZ2.5: source/class/class_template.php line58

  1.         $template = preg_replace("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/ies", "\$this->loadcsstemplate('\\1')", $template);
复制代码
1、loadcsstemplate()这个函数不需要参数
2、\\1后向引用是不存在的,因为前面的匹配规则中没有捕获组1

修正代码:
DZ72

  1.     $template = preg_replace_callback("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/is", create_function(
  2.         '$m',
  3.         'return loadcsstemplate();'
  4.     ), $template);    // waiting: loadcsstemplate() 不需要参数
复制代码
DZX

  1.      $template = preg_replace_callback("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/is", create_function(
  2.         '$m',
  3.         'return $this->loadcsstemplate();'
  4.     ), $template);    // waiting: loadcsstemplate() 不需要参数
复制代码
php5.5开始preg_replace() 弃用/e修饰符,采用preg_replace_callback()可避免以后的兼容问题







评分

1

查看全部评分

 楼主| mark35 发表于 2013-9-20 16:23:16 | 显示全部楼层

template模板处理代码从dz7.2开始到dzx3基本没啥变化,基本就是从一个函数变成了一个类而已
PHP5.5开始彻底废弃preg_replace()函数的e模式而使用preg_replace_callback()替代,而dz中大量使用/e模式(尤其是的模板处理相关代码),如果不逐步更新以后将会是个问题。
回复

使用道具 举报

 楼主| mark35 发表于 2013-9-20 16:30:17 | 显示全部楼层
补充下:
PHP5.4开始在匿名函数从支持$this,所以上面补丁在dx3上面可能会有php兼容问题。既然loadcsstemplate()函数无需参数那么就可以这样修改:
DZ72

  1.         $template = preg_replace_callback("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/is", 'loadcsstemplate', $template);
复制代码
DXZ

  1.         $template = preg_replace_callback("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/is", '$this->loadcsstemplate', $template);
复制代码
回复

使用道具 举报

genggou 发表于 2013-9-22 00:06:18 | 显示全部楼层
学习了,马上去修改下,我用的7.2
回复

使用道具 举报

rstar 发表于 2013-9-23 20:38:45 | 显示全部楼层
  好贴啊 。。
回复

使用道具 举报

rstar 发表于 2013-9-23 20:42:21 | 显示全部楼层
官方来看对不对啊 要勇于承认自己的错误哦。。。。。
回复

使用道具 举报

smallthing 发表于 2013-9-23 20:53:33 | 显示全部楼层
另外就是htmlspecial,php 5.4里默认是utf8了 gbk版本的要加上gbk参数
不然很多地方会是空值.
回复

使用道具 举报

dengfeng0217 发表于 2013-9-23 23:22:10 | 显示全部楼层
x2存在这个问题吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-3-10 04:53 , Processed in 0.038570 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表