我需要从引荐网址获取用户名(仅当引荐来源以" / members /&#34开头;仅在主机名之后。
我目前无法正常工作,但如何修改以从网址获取用户名?
// 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);
}
}
答案 0 :(得分:4)
您可以使用parse_url()
拆分网址,然后将其与preg_match()
匹配:
if (preg_match('~^/members/([^/]+)~', parse_url($string, PHP_URL_PATH), $matches)) {
// path starts with "/members/"
// $matches[1] is the user name
}
答案 1 :(得分: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。
答案 2 :(得分:0)
您可以使用parse_url()
和pathinfo()
的组合:
$pathDir = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_DIRNAME);
$directories = explode('/', $pathDir);
if(array_search('members', $directories) !== false) {
// perform your magic
}
答案 3 :(得分:0)
这是我提出的代码:
$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/
不匹配,但在下一个字符。
有任何疑问,我可以自由回答。