【问题标题】:str_replace: Replace string with a functionstr_replace:用函数替换字符串
【发布时间】:2012-04-25 08:10:11
【问题描述】:

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

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

例子:

function contactform(){
  // bunch of inputs
}

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

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

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

谢谢

【问题讨论】:

  • 如果 {contactform} 大部分时间没有出现,最好按照@jedwards 的建议使用preg_replace_callback。如果它始终存在,那么您当前的代码最有意义。

标签: php str-replace


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你的方法很好,如果你打算多次使用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'; ?>
    

    【讨论】:

      【解决方案3】:

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

      $wysiwyg = 'Some string and {contactform}';
      
      $find = '{contactform}'; 
      
      strpos($wysiwyg, $find) ? call_user_func($find) : '';
      

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          最近更新 更多