note警告:preg_replace_callback():需要参数

时间:2015-09-01 05:57:17

标签: javascript php preg-replace-callback

我登上了一个小错误,我注意到只是通过改变preg_replace来解决preg_replace_callback把他的另一个错误告诉我,如果有人有权解释我提前感谢的错误,我会理解这个错误。

这是错误

Warning: preg_replace_callback(): Requires argument 2, 'stripslashes('\1').mb_convert_case(stripslashes('\2'),MB_CASE_UPPER, 'UTF-8')', to be a valid callback in /htdocs/system/ext/Smarty/libs/plugins/modifier.capitalize.php on line 33
Warning: preg_replace_callback(): Requires argument 2, 'stripslashes('\1').mb_convert_case(stripslashes('\3'),MB_CASE_UPPER, 'UTF-8')', to be a valid callback in /htdocs/system/ext/Smarty/libs/plugins/modifier.capitalize.php on line 43

第33行

$upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\2'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $string);
    }

第43行

$upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\3'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $upper_string);
       return $upper_string;
   }

谢谢

1 个答案:

答案 0 :(得分:1)

我担心你不能使用任何表达式作为回调,而是一个REAL函数名,而不是整个表达式 “stripslashes('\ 1')。mb_convert_case(stripslashes('\ 2'),MB_CASE_UPPER,'UTF-8')”

您还可以传递WHOLE函数作为参数...

我知道查看文档会很痛苦,但我无法更好地解释它than it is in here

您应该像这样使用它:

$closure = function($match){
        return $match[0].stripslashes('\1').mb_convert_case(stripslashes('\2'),MB_CASE_UPPER, 'UTF-8');
    } ;
$upper_string = preg_replace_callback(
    "!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
    $closure
    ,
    $url);

注意我删除了“e”正则表达式搜索修饰符,因为......好吧,因为它没用并且已弃用,但可以在regexp结束时再次添加它并尝试错误