我有一个复杂的问题: 我有一个很长的文本,我需要在我的文本中调用一些PHP函数。 函数名是myfunction(); 我以下列方式将我的功能包含在我的文本中: “文本文本myfunction [1,2,3,4,5];更多文本文本......”
我想用函数myfunction的结果用[]括号中的变量替换每个myfunction [...]。
我的代码是:
<?php echo preg_replace('/myfunction[[0-9,]+]/i',myfunction($1),$post['content']); ?>
,但它没有用。
参数应该是一个数组,因为它可以包含任意数量的值。
答案 0 :(得分:1)
如果我是你,我会避免使用e
修饰符preg_replace
,因为它可能会导致您执行任意代码。请改用preg_replace_callback
。它稍微冗长一点,但更有效:
echo preg_replace_callback('/myfunction\[([0-9,]+)\]/i', function($matches) {
$args = explode(',', $matches[1]); // separate the arguments
return call_user_func_array('myfunction', $args); // pass the arguments to myfunction
}, $post['content']);
这使用匿名函数。如果您在5.3之前使用PHP版本,则无法使用此功能。您必须创建一个命名函数,并根据手册页上的说明使用它。
答案 1 :(得分:0)
您可以使用preg_replace()
的“e”修饰符(对于EVAL),如下所示:
$text = preg_replace('/myfunction\[(.*?)\]/e', 'myfunction("$1")', $text);
我并没有真正了解您的数据结构,所以我现在只能帮助您。您可以探索该解决方案。
来自PHP Manual:
e(PREG_REPLACE_EVAL) 如果设置了此修饰符,则preg_replace()会对替换字符串中的反向引用进行正常替换,将其作为PHP代码进行计算,并使用结果替换搜索字符串。单引号,双引号,反斜杠()和NULL字符将在替换后向引用中通过反斜杠进行转义。
答案 2 :(得分:-1)
您需要在正则表达式中添加“e”修饰符,转义[
和]
,并将第二个参数字符串化。
preg_replace('/myfunction\[[0-9,]+\]/ei','myfunction("$1")',$post['content']);