我登上了一个小错误,我注意到只是通过改变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;
}
谢谢
答案 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结束时再次添加它并尝试错误