调用函数作为 preg_replace() 的替换参数
我有一个复杂的问题: 我有一个很长的文本,我需要在文本中调用一些 php 函数。 函数名称是 myfunction(); 我们通过以下方式在文本中包含该函数: " text text text myfunction[1,2,3,4,5]; more text text ... "
我想用函数 myfunction 的结果替换每个 myfunction[...] 以及 [] 中的变量括号。
我的代码是:
<?php echo preg_replace('/myfunction[[0-9,]+]/i',myfunction($1),$post['content']); ?>
,但它不起作用。
该参数应该是一个数组,因为它可以包含任意数量的值。
I have a complicated problem:
I have a very long text and I need to call some php functions inside my text.
The function name is myfunction();
I`we included in my text the function in the following way:
" text text text myfunction[1,2,3,4,5]; more text text ... "
And I want to replace each myfunction[...] with the result of the function myfunction with the variables from the [] brackets.
my code is:
<?php echo preg_replace('/myfunction[[0-9,]+]/i',myfunction($1),$post['content']); ?>
,but it`s not working.
The parameter should be an array, because it can contain any number of values.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果我是您,我会避免使用
e
修饰符来preg_replace
,因为它可能导致您执行任意代码。请改用preg_replace_callback
。它稍微冗长一些,但更有效:这使用了匿名函数。如果您使用 5.3 之前的 PHP 版本,则此功能将无法使用。您必须创建一个命名函数并按照手册页上的说明使用它。
If I were you, I would avoid using the
e
modifier topreg_replace
because it can lead you open to execution of arbitrary code. Usepreg_replace_callback
instead. It's slightly more verbose, but much more effective:This uses an anonymous function. This functionality won't be available to you if you use a version of PHP before 5.3. You'll have to create a named function and use that instead, as per the instructions on the manual page.
您可以使用
preg_replace()
的“e”修饰符(用于 EVAL),如下所示:我并没有真正了解您的数据的结构,所以目前我能做的就是帮助您。您可以探索该解决方案。
来自 PHP 手册:
You can use
preg_replace()
's "e" modifier (for EVAL) used like this :I didn't really get how your data is structured so it's all I can do to help you at the moment. You can explore that solution.
From the PHP Manual :
您需要在正则表达式中添加“e”修饰符、转义
[
和]
并将第二个参数字符串化。You need to add the "e" modifier, escape
[
and]
in the regex expression and stringify the second argument.