정규표현식 e 수정자 (= e modifier) 대체하는 코드 형식으로 변경하려면?
본문
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'] 변수가 유투브 관련 내용을 출력 안 함.
/* 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
mw_youtube(
$matches
[1],
$q
);
=>
return mw_youtube(
$matches
[1],
$q
);
mw_vimeo(
$matches
[1],
$q
);
=>
return
mw_vimeo(
$matches
[1],
$q
);
답변을 작성하시기 전에 로그인 해주세요.