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);
报错的就是这一句啦 展开
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
报错的就是这一句啦 展开
3个回答
展开全部
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'这个操作。
你贴出来的代码,第一个参数$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要怎么改啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询