2015-09-01 21 views
-1

我登上了一個小錯,我注意到只是通過改變preg_replace preg_replace_callback來解決他把我的另一個錯誤,我董事會不明白,如果有人會有特權解釋錯誤,我感謝提前。note注意: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

所以你使用'preg_replace'但遇到了一些問題,然後改爲'preg_replace_callback'? – King

+0

@DavidDomain剛剛改進了我的答案...給它一個去。 – Amarnasan

回答

1

恐怕你不能使用任何表達回調,但是a REAL函數名,而不是整個表達式像 「的stripslashes( '\ 1')。mb_convert_case(的stripslashes( '\ 2'),MB_CASE_UPPER, 'UTF-8')」

還可以通過一個整體的功能參數...

我知道這是一個痛苦的看文件,但我無法解釋它更好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 「正則表達式搜索修飾符,因爲...好吧,因爲它' s是無用的,並且不推薦使用,但是可以在regexp結尾再次添加它,並且試驗出錯

+0

我不是OP,我剛剛編輯了這個問題。不管怎麼說,還是要謝謝你。 – DavidDomain

+0

糟糕!明白了,對不起:P – Amarnasan