2014-12-17 2 views
2

참조 URL에서 사용자 이름을 가져와야합니다 (호스트 이름 다음에 리퍼러가 "/ members /"로 시작하는 경우에만)PHP에서 두 부분 문자열 사이의 문자열 가져 오기?

현재 작동하지 않지만 어떻게 작동합니까? ? URL에서 사용자의 이름

// example URL 
// http://domain.com/members/john-doe/something 
// note that domain.com or protocol can change 

$string = $_SERVER['HTTP_REFERER']; 
$start = '/members/'; 
$end = '/'; 

$startpos = strpos($string, $start) + strlen($start); 

if (strpos($string, $start) !== false) { 
    $endpos = strpos($string, $end, $startpos); 

    if (strpos($string, $end, $startpos) !== false) { 
     echo substr($string, $startpos, $endpos - $startpos); 
    } 
} 

답변

4

는 CA. N preg_match()와 함께 URL을 해체 한 후 일치 parse_url()를 사용

$pathDir = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_DIRNAME); 
$directories = explode('/', $pathDir); 

if(array_search('members', $directories) !== false) { 
    // perform your magic 
} 
1

나는이 작업을 수행 할 것 -

여기
$url = 'http://domain.com/members/john-doe/something'; 
$urlParts = explode('/', $url); // get all parts of te url 
if('members' == $urlParts[3]) { // test and display 
    echo $urlParts[4]; 
} 

example입니다

0

당신은 이것에 대한 parse_url()pathinfo()의 조합을 사용할 수 있습니다 :

$string = $_SERVER['HTTP_REFERER']; 
$start = '/members/'; 
$end = '/'; 

$startpos = strpos($string, $start); 

if ($startpos !== false) { 
    $endpos = strpos($string, $end, ($startpos += strlen($start)) + 1); 

    if ($endpos !== false) { 
     echo substr($string, $startpos, $endpos - $startpos); 
    } 
} 

OP의 코드를 기반으로하지만 수정 된 사항이 있습니다. 3, 4 strpos

는 OP는 $startpos + 1을 설정하는 것을 잊었다, 그래서 문자열 /member// 일치하지만, 다음 문자에 있지 않습니다.

의심 할 여지없이, 나는 그들에게 자유롭게 답변 할 수 있습니다.

0

이 내가 생각 해낸 코드는 다음과 같습니다

if (preg_match('~^/members/([^/]+)~', parse_url($string, PHP_URL_PATH), $matches)) { 
    // path starts with "/members/" 
    // $matches[1] is the user name 
} 
관련 문제