1

只是一个简单的问题。我有一个存储在函数中的联系表单,因为在我希望它拥有的页面上调用它更容易。

现在为了扩展可用性,我想使用 str_replace 搜索 {contactform}。

例子:

function contactform(){
  // bunch of inputs
}

$wysiwyg = str_replace('{contactform}', contactform(), $wysiwyg);

所以基本上,如果找到 {contactform}。将其替换为contactform 的输出。

现在我知道我可以在替换之前运行该函数并将其输出存储在一个变量中,然后用同一个变量替换它。但我很想知道是否有比我想到的更好的方法。

谢谢

4

4 回答 4

2

要回答您的问题,您可以使用 PCRE 和preg_replace_callback然后修改您的contactform()函数或创建一个接受匹配项的包装器。

我认为您将函数运行一次并将其存储在变量中的想法更有意义。

于 2012-04-25T08:14:51.033 回答
1

您的方法很好,如果您打算多次使用 contactform() 的内容,我会将其设置为 $var。

在运行 str_replace 函数之前使用http://php.net/strpos检查 {contact_form} 是否存在可能会有所帮助。

您可以尝试两种方式,如果您的服务器支持,请进行基准测试:

<?php echo 'Memory Usage: '. (!function_exists('memory_get_usage') ? '0' : round(memory_get_usage()/1024/1024, 2)) .'MB'; ?>
于 2012-04-25T08:16:44.210 回答
0

您可能想在call_user_func()这里查看 php 的更多信息http://php.net/call_user_func

$wysiwyg = 'Some string and {contactform}';

$find = '{contactform}'; 

strpos($wysiwyg, $find) ? call_user_func($find) : '';
于 2012-04-25T08:13:46.240 回答
0

是的,有:自己写一个。(除非已经有一个,这在 PHP 中总是很难确定;请参阅我的下一点。)

啊,就是这样:preg_replace_callback()。当然,它是三个正则表达式库之一,因此不进行简单的字符串操作。

无论如何,我的观点是:不要遵循 PHP 的 [非] 设计准则。使用回调编写您自己的多字节安全字符串替换函数,不要使用call_user_func().

于 2012-04-25T08:25:46.027 回答