테스트 사이트 - 개발 중인 베타 버전입니다

php버전문제로인한 익명함수 에러문제입니다.. 채택완료

용미엘 3년 전 조회 1,890

기존에 xe보드로 만들어진 홈페이지를 저희쪽에 옮기고 있는데

php가 5.2버전이라 익명함수가 인식되지못해서 에러가난다고 합니다.

 

</p>

<p>$attrs = array();

    if(preg_match_all('/([\w:-]+)\s*=(?:\s*(["\']))?(?(2)(.*?)\2|([^ ]+))/s', $match[3], $m))

    {

        foreach($m[1] as $idx => $name)

        {

            if(strlen($name) >= 2 && substr_compare($name, 'on', 0, 2) === 0)

            {

                continue;

            }</p>

<p>            $val = preg_replace_callback('/&#(?:x([a-fA-F0-9]+)|0*(\d+));/', function($n) {return chr($n[1] ? ('0x00' . $n[1]) : ($n[2] + 0)); }, $m[3][$idx] . $m[4][$idx]);

            $val = preg_replace('/^\s+|[\t\n\r]+/', '', $val);</p>

<p>            if(preg_match('/^[a-z]+script:/i', $val))

            {

                continue;

            }</p>

<p>            $attrs[$name] = $val;

        }

    }</p>

<p>

 

$val = preg_replace_callback('/&#(?:x([a-fA-F0-9]+)|0*(\d+));/', function($n) {return chr($n[1] ? ('0x00' . $n[1]) : ($n[2] + 0)); }, $m[3][$idx] . $m[4][$idx]);

 

이부분인것 같은데 어떻게 수정해야할지를 잘 모르겠습니다.. 기존에 그누보드만 써본 초보라;;

 

조언부탁드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
3년 전

이렇게 테스트해 볼수 있습니다.

</p>

<p><?php

$match = array('', '', '', '<div class="abc" data-a=\'def\'>123</div>');

function cb_00($n) {return chr($n[1] ? ('0x00' . $n[1]) : ($n[2] + 0)); }</p>

<p>$attrs = array();

    if(preg_match_all('/([\w:-]+)\s*=(?:\s*(["\']))?(?(2)(.*?)\2|([^ ]+))/s', $match[3], $m))

    {

        foreach($m[1] as $idx => $name)

        {

            if(strlen($name) >= 2 && substr_compare($name, 'on', 0, 2) === 0)

            {

                continue;

            }

            //$val = preg_replace_callback('/(?:x([a-fA-F0-9]+)|0*(\d+));/', function($n) {return chr($n[1] ? ('0x00' . $n[1]) : ($n[2] + 0)); }, $m[3][$idx] . $m[4][$idx]);

            $val = preg_replace_callback('/(?:x([a-fA-F0-9]+)|0*(\d+));/', 'cb_00', $m[3][$idx] . $m[4][$idx]);

            $val = preg_replace('/^\s+|[\t\n\r]+/', '', $val);

            if(preg_match('/^[a-z]+script:/i', $val))

            {

                continue;

            }

            $attrs[$name] = $val;

        }

    }

    

print_r($m);

?></p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

https://www.php.net/manual/en/function.preg-replace-callback.php

(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)

함수를 따로 빼고

파라미터로 함수 이름을 넣어 보세요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인