정규표현식 preg_replace 함수 e 수정자를 preg_replace_callback 형식으로 바꾸려면?
본문
if (!$mw_basic['cf_zzal'])
$view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_image(\$view, '\\1', '\\2')", $view['content']);
else
$view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "", $view['content']);
$view['rich_content'] = preg_replace("/{동영상\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_movie(\$view, '\\1', '\\2')", $view['rich_content']);
위 정규표현식에서
e 수정자를 제거하고 preg_replace_callback 함수 형태로 변경하려면 ?
PS.
/bbs/view.php 파일 보니까 비슷한 코드가 있길래 그거 따라 했더니,
앞서 선언한 함수를 다시 불러올 수 없다는 에러가 뜨더라구요...
//$view['rich_content'] = preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "view_image(\$view, '\\1', '\\2')", $view['content']);
function conv_rich_content($matches)
{
global $view;
return view_image($view, $matches[1], $matches[2]);
}
$view['rich_content'] = preg_replace_callback("/{이미지\:([0-9]+)[:]?([^}]*)}/i", "conv_rich_content", $view['content']);
답변 2
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);
}
제가 제대로 고친 게 맞는지?
if (!$mw_basic['cf_zzal']) {
//$view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_image(\$view, '\\1', '\\2')", $view['content']);
function conv_rich_content1($matches)
{
global $view;
return mw_view_image($view, $matches[1], $matches[2]);
}
$view['rich_content'] = preg_replace_callback("/{이미지\:([0-9]+)[:]?([^}]*)}/i", "conv_rich_content1", $view['content']);
} else {
//$view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "", $view['content']);
$view['rich_content'] = preg_replace_callback("/{이미지\:([0-9]+)[:]?([^}]*)}/i", "", $view['content']);
}
//$view['rich_content'] = preg_replace("/{동영상\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_movie(\$view, '\\1', '\\2')", $view['rich_content']);
function conv_rich_content2($matches)
{
global $view;
return mw_view_movie($view, $matches[1], $matches[2]);
}
$view['rich_content'] = preg_replace("/{동영상\:([0-9]+)[:]?([^}]*)}/i", "conv_rich_content2", $view['rich_content']);
위처럼 고치니까, 일단 해당 라인에선 에러가 안 나고, 다음 코드에서 동일 에러가 나는데...
/skin/board/miwit/mw.lib/mw.function.lib.php 파일 약 3046 라인
!-->function mw_youtube_content($content, $q='')
{
$pt = mw_youtube_pattern($content);
if ($pt)
$content = preg_replace($pt, "mw_youtube('\\1', '$q')", $content);$pt = mw_vimeo_pattern($content);
if ($pt)
$content = preg_replace($pt, "mw_vimeo('\\1', '$q')", $content);return mw_video_wrapper($content);
}