PHP 类Smarty_Compiler.class.php中有一句话报错了,要怎么改?

$source_content=preg_replace($search.'e',"'".$this->_quote_replace($this->left_delimi... $source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
报错的就是这一句啦
展开
 我来答
851468308qq
2014-10-18 · 超过100用户采纳过TA的回答
知道小有建树答主
回答量:133
采纳率:0%
帮助的人:136万
展开全部
preg_replace函数仍然可以使用,你这里出错是因为你的旧的php版本在使用preg_replace时,其第一个参数,即$pattern,使用/e修饰符,而php在5.5.0版本以后preg_repalce函数已经废弃使用/e修饰符,如果使用/e修饰符的话,就会报一个E_DEPRECATED级别的错误。
你贴出来的代码,第一个参数$search.'e',明显使用了/e修饰符,你这里有2个选择,一个是根据提示,使用preg_replace_callback替换preg_replace,另外一个最简单也是大多数情况下的方法就是将将你的第一个参数直接写成$search,不要.'e'这个操作。
追问
我可不敢贸然把这个e去掉,但是我也不 理解这个e是干嘛用的
追答
如下为preg_replace函数的原型,mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1[, int &$count ]] )
当使用/e修饰符时,preg_replace会将第2个参数$replacement 返回的字符串当做一个php代码来执行。比如说$replacement 为$_POST['na'];而$_POST['n']返回的值为phpinfo(),那么$replacement 最终的字符串就是执行phpinfo()函数返回的字符串;
你要确保这里的preg_replace的第二个参数,即"'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"字符串不是类似phpinfo()这样的一个可执行的php的代码的话,你可以先echo 这个字符串(第二个参数),看一下是否是可执行的php代码,如果不是,则可以直接将.'e'去掉。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-17
展开全部
你的模板文件语法有错误
更多追问追答
追问
有语法问题的话旧版就会报错了,这是升级PHP后才有的问题。我很确定模板文件不存在语法问题
追答
报错内容贴出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-16
展开全部
没错啊,可能是你的边界符没写全造成的。
追问
先前是没报错,我升级PHP版本后才报的错,报错时建议用preg_replace_callback代替,如果用preg_replace_allback要怎么改啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式