lang/php

PHP 상대주소 절대주소변경

C/H 2018. 7. 11. 08:30

PHP >= 7.0.0 : preg_replace /e modifier는 지원되지 않는다.
[함수] 상대경로를 특정URI 기준의 절대경로로 변환하기 에서 원래 소스를 확인 할 수 있다.

preg_replace to preg_replace_callback

function http_src_to_abs($content, $base_uri) 
{ 
    $pattern_a = array("@(\s*href|\s*src)(\s*=\s*'{1})([^']+)('{1})@i" 
                        , "@(\s*href|\s*src)(\s*=\s*\"{1})([^\"]+)(\"{1})@i" 
                        , "@(\s*href|\s*src)(\s*=\s*)([^\s>\"\']+)(\s|>)@i"); 
    // $replace_a = array("'\\1\\2'.http_path_to_url('\\3', '$base_uri').'\\4'" 
    //                     , "'\\1'.stripslashes('\\2').http_path_to_url('\\3', '$base_uri').stripslashes('\\4')" 
    //                     , "'\\1\\2'.http_path_to_url('\\3', '$base_uri').'\\4'"); 
                        
    $content = preg_replace_callback($pattern_a[0], 
        function($m) use($base_uri){
            return $m[1].$m[2].http_path_to_url($m[3], $base_uri).$m[4];
        }, $content); 
    $content = preg_replace_callback($pattern_a[1], 
        function($m) use($base_uri){
            return $m[1].stripslashes($m[2]).http_path_to_url($m[3], $base_uri).stripslashes($m[4]);
        }, $content); 
    $content = preg_replace_callback($pattern_a[2], 
        function($m) use($base_uri){
            return $m[1].$m[2].http_path_to_url($m[3], $base_uri).$m[4];
        }, $content); 
    
    return $content;
}


반응형