Php formtools.org preg_replace/e
我需要在多个域上安装Php formtools.org preg_replace/e,php,regex,preg-replace,Php,Regex,Preg Replace,我需要在多个域上安装formtools.org,但由于它使用了preg\u replace(),我的托管公司不允许这样做。我搜索了他们的论坛,但运气不好(我无法访问提问) 我相信,如果可以使用preg\u replace\u callback()重写以下内容,这将解决我所有的问题 $source_content = preg_replace($search.'e', "'" . $this->_quote_replace($this->left_delimiter) . 'p
formtools.org
,但由于它使用了preg\u replace()
,我的托管公司不允许这样做。我搜索了他们的论坛,但运气不好(我无法访问提问)
我相信,如果可以使用preg\u replace\u callback()
重写以下内容,这将解决我所有的问题
$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);
任何帮助都将不胜感激 如果该服务不支持
preg\u replace()
,那么如果它支持preg\u replace\u callback()
,我会感到惊讶(因为它们基本上是相同的)。但是,如果问题是由于不推荐使用的e
修饰符引起的,preg\u replace\u callback()
将有所帮助
使用非常简单,第二个参数是一个可调用函数,用于创建替换文本。此函数接受一个参数,该参数是该匹配的组的数组。因此,我的答案中的reset($matches)
与示例中的\\0
类似。试试这个:
$source_content = preg_replace_callback(
$search,
function($matches) {
$match = reset($matches);
$count = substr_count($match, "\n");
$string = "'" . $this->_quote_replace($this->left_delimiter) . "php'";
$string .= str_repeat("\n", $count);
$string .= "'" . $this->_quote_replace($this->right_delimiter) . "'";
return $string;
},
$source_content
);
注意:由于在不编写函数、表达式和
$source\u内容
的情况下,我没有最简单的方法来测试这一点,因此这只是从零开始翻译的。如果您有任何错误,请发表评论(而不是否决),我可以解决它们:)感谢您尝试与我一起解决此问题!我希望我能提供更多的帮助,但这对我来说有点先进。我确实在错误日志中看到了这一点:mod_fcgid:stderr:PHP致命错误:在/var/www/vhosts/xxx.xxx.xxx/httpdocs/forms/global/smarty/smarty_Compiler.class.PHP第278行的对象上下文中使用$this,推荐人:哦,我认为preg\u replace对我的服务很好,这是他们不允许的/e选项。@ScottRiggle什么是$this->\u quote\u replace($this->xxx\u delimiter)
,反正我们可以避免这个?对不起,我不知道这是什么,我没有写它。它来自Smarty_Compiler.class.php这似乎奏效了。我怎样才能感谢你对我的帮助@山姆