복붙노트

사용되지 않는 preg_replace / e를 preg_replace_callback [duplicate]

PHP

사용되지 않는 preg_replace / e를 preg_replace_callback [duplicate]

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

위의 코드는 PHP 5.5로 업그레이드 한 후 비추천 경고를 표시합니다 :

preg_replace_callback ()으로 코드를 대체하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.익명 함수를 사용하여 일치 항목을 함수에 전달할 수 있습니다.

    익명 함수를 사용하여 일치 항목을 함수에 전달할 수 있습니다.

    $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
    );
    

    더 빠르다는 것 외에도 문자열에서 큰 따옴표를 올바르게 처리합니다. / e를 사용하는 현재 코드는 큰 따옴표를 "\"로 변환합니다.

  2. from https://stackoverflow.com/questions/19245205/replace-deprecated-preg-replace-e-with-preg-replace-callback by cc-by-sa and MIT license