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

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

sinbi 6년 전 조회 2,778

</p>

<p>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";</p>

<p>    foreach ($pt as $p) {

        if (preg_match($p, $content)) {

            return $p;

        }

    }</p>

<p>    return false;

}</p>

<p>function mw_vimeo_pattern($content)

{

    $pt = array();

    $pt[] = "/\[(https?:\/\/vimeo\.com\/[^]]+)\]/ie"; 

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

<p>    foreach ($pt as $p) {

        if (preg_match($p, $content)) {

            return $p;

        }

    }</p>

<p>    return false;

}</p>

<p>

 

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

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

 

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

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

 

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

 

 

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

 

※ 참고

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

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

 

</p>

<p>/* PHP 7210 시작 - 슈와이 님 */

function conv_mw_youtube($matches) {

    global $q;

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

}</p>

<p>function conv_mw_vimeo($matches) {

    global $q;

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

}</p>

<p>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 종료 - 슈와이 님 */</p>

<p>

 

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

답변 1개

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

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

=>

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

 

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

=>

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

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

답변에 대한 댓글 2개

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

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

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

로그인