5.5.3中不推荐使用preg_replace

时间:2013-10-19 15:01:03

标签: php

我目前正在重新编程php中的框架,我将开发服务器升级到php 5.5.3。当我启动webbrowser时,它会返回以下错误:

[19-Oct-2013 16:54:05 Europe/Amsterdam] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Applications/MAMP/htdocs/fw/lib/lang.php on line 57

第57行是;

$response = preg_replace('/\{'.$find.'(:(.*))?\}/Ue', 'str_replace("{value}", "\\2", $replace)', $response);

我真的很害怕阅读这些php文档,我是一名初学者,只需通过preg_replace()更改preg_replace_callback()就太好了。一位同事告诉我,它必须是有价值的东西[1],但那不起作用。

是否有一个简单的解决方案,我忽略了什么?

1 个答案:

答案 0 :(得分:3)

以下是the page about modifiers,为您提供有关弃用原因的更多详细信息,以及具体含义。

基本上原因是/e修饰符导致字符串被评估为PHP代码,就像调用了eval一样。使用preg_replace_callback代替,它允许您传递实际的 PHP函数确实是可行的方法。

如果用匿名函数替换字符串代码(第二个参数),那么你的代码应该是这样的:

$response = preg_replace_callback(
    '/\{'.$find.'(:(.*))?\}/U', 
    function($m) use ($replace) {
      return str_replace($m, "\\2", $replace);
    } , 
    $response);

关键字use确保匿名函数可以使用应在调用范围中定义的$replace变量。请参阅this discussion