채택완료

정규표현식 e 수정자 (= e modifier) 대체하는 코드 형식으로 변경하려면?

Copy
function mw_youtube_pattern($content)
{
    $content = stripslashes($content);
    $pt = array();
    $pt[] = "/\[<a href=\"(https?:\/\/youtu\.be\/[^\"]+)\"[^>]*>[^<]+<\/a>\]/ie";
    $pt[] = "/\[<a href=\"(https?:\/\/www\.youtube\.com\/[^\"]+)\"[^>]*>[^<]+<\/a>\]/ie";
    $pt[] = "/\[(https?:\/\/youtu\.be\/[^\]]+)\]/ie";
    $pt[] = "/\[(https?:\/\/www\.youtube\.com\/[^\]]+)\]/ie";

    foreach ($pt as $p) {
        if (preg_match($p, $content)) {
            return $p;
        }
    }

    return false;
}

function mw_vimeo_pattern($content)
{
    $pt = array();
    $pt[] = "/\[(https?:\/\/vimeo\.com\/[^]]+)\]/ie"; 
    $pt[] = "/\[<a href=\"(https?:\/\/vimeo\.com\/[^\"]+)\"[^>]+>[^<]+<\/a>\]/ie"; 

    foreach ($pt as $p) {
        if (preg_match($p, $content)) {
            return $p;
        }
    }

    return false;
}

위 함수 배열값에 e 수정자가 있다보니,
$view['rich_content'] 본문 변수가 위 함수를 거칠 경우 본문 내용 일부가 출력이 안 되는데,

이 부분은 어떤 식으로 수정해줘야 할까요? 

[함수 통과 전 $view['rich_content']  상태]

[https://youtu.be/2s8DkMqsEF0]  <--- 함수 통과 시 이 부분이 사라짐.
[https://vimeo.com/12280336]  <--- 함수 통과 시 이 부분이 사라짐.
[e:em1] 
★ 

[함수 통과 후 $view['rich_content'] 상태]
[e:em1] 

이 함수는 아래 슈와이 님이 preg_replace 형식을 preg_replace_callback 형식으로 수정해주신 함수 안으로 들어와 사용됩니다.

※ 참고

e를 제거하면 에러 출력이 사라지는데, 

$view['rich_content'] 변수가 유투브 관련 내용을 출력  안 함.

Copy
/* PHP 7210 시작 - 슈와이 님 */
function conv_mw_youtube($matches) {
    global $q;
    mw_youtube($matches[1], $q);
}

function conv_mw_vimeo($matches) {
    global $q;
    mw_vimeo($matches[1], $q);
}

function mw_youtube_content($content, $q='')
{
    $pt = mw_youtube_pattern($content);
    if ($pt) 
        $content = preg_replace_callback($pt, 'conv_mw_youtube', $content);    // 에러 발생 라인
    $pt = mw_vimeo_pattern($content);  
    if ($pt)
        $content = preg_replace_callback($pt, 'conv_mw_vimeo', $content);   // 에러 발생 라인
    return mw_video_wrapper($content);
}
/* PHP 7210 종료 - 슈와이 님 */

답변 1개 / 댓글 2개

채택된 답변
+20 포인트

mw_youtube($matches[1], $q);

=>

return mw_youtube($matches[1], $q);

mw_vimeo($matches[1], $q);

=>

return mw_vimeo($matches[1], $q);

답변에 대한 댓글 2개

감사합니다. 슈와이 님.
한번 적용 해보고 사용후기 남길게요.
방금 적용해보니, 드디어 유투브랑 비메오가 보이네요. ㅎ
감사합니다. 슈와이 님. ( ^ _________ ^ ) ===b

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