str_replace:用函数替换字符串

时间:2012-04-25 08:10:12

标签: php str-replace

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

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

示例:

function contactform(){
  // bunch of inputs
}

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

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

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

由于

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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'; ?>

答案 2 :(得分:0)

你可能想看看php call_user_func()更多信息http://php.net/call_user_func

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

$find = '{contactform}'; 

strpos($wysiwyg, $find) ? call_user_func($find) : '';

答案 3 :(得分:0)

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

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

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