2013-10-08 19 views
37
$result = preg_replace(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU", 
    "CallFunction('\\1','\\2','\\3','\\4','\\5')", 
    $result 
); 

Powyższy kod daje ostrzeżenia amortyzacyjne po aktualizacji PHP 5.5:Wymienić do wycofanego preg_replace/E preg_replace_callback

Przestarzałe: preg_replace():/e modyfikator nieaktualnych użyciu preg_replace_callback zamiast

Jak mogę zamienić kod na preg_replace_callback()?

Odpowiedz

52

Można użyć anonymous function przekazać wyniki do swojej funkcji:

$result = preg_replace_callback(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/isU", 
    function($m) { return CallFunction($m[1], $m[2], $m[3], $m[4], $m[5]); }, 
    $result 
); 

oprócz tego, że szybciej, będzie to również prawidłowo obsługiwać cudzysłów w ciąg. Twój obecny kod przy użyciu /e zamieni podwójny cudzysłów " na \".