如何從 URL 獲取子域。說吧subdomain.example.com,那我只想要subdomain
例子 :
https://subdomain.example.com
https://anything.example.com/pathurl
輸出 :
Subdomain
anything
嘗試從stackoverflow進行一些修改但沒有作業的代碼:(
$subdomain = substr($_SERVER['SERVER_NAME'],0,4) === '/^([^.] )/' ? substr($_SERVER['SERVER_NAME'],0) : $_SERVER['SERVER_NAME'];
echo $subdomain;
uj5u.com熱心網友回復:
首先,打破你的嘗試:
$_SERVER['SERVER_NAME']為您提供完整的服務器名稱,例如“subdomain.example.com”substr($_SERVER['SERVER_NAME'],0,4)為您提供該字串的前四個字符;您復制的示例很可能是在尋找“www.”,它有四個字符長,但“subd”不會告訴您太多資訊===只是比較兩件事是相同的;因為您剛剛要求輸入四個字符,所以它永遠不會匹配任何其他長度的字串'/^([^.] )/'看起來像正則運算式(又名“正則運算式”)——匹配字串的模式;要在 PHP 中使用它,您需要PCRE 系列函式,例如preg_match和preg_replace
接下來,我總是給出的提示:分解問題。暫時忘記您知道什么是子域,并注意您有一個字串,并希望所有文本都在第一個點之前。
因此,一種方法是在每個點上分割字串,并取第一部分。為此,您將使用令人興奮的名稱explode:
$subdomain = explode('.', $fulldomain, 1)[0];
另一種方法是使用您找到的正則運算式模式,其內容為“從頭開始,匹配除點以外的任何內容,至少一次,并捕獲該部分”。您實際上可以跳過一對括號,因為它們將整個模式分組,所以就'/^[^.] /'足夠了。為此,您將使用preg_match,但請注意,它不會回傳匹配的部分,而是將它們放在您傳遞給它的額外陣列中:
$matches = null; // will be populated by preg_match
preg_match('/^[^.] /', $fulldomain, $matches);
$subdomain = $matches[0];
注意:對于“stackoverflow.com”的輸入,上面將回傳“stackoverflow”。這對于簡單的字串匹配是不可避免的,因為沒有標準的分段數量來標記“公共域”——例如“bbc.co.uk”與“bbc.com”在同一級別注冊,但你不能通過觀察它們來告訴你。除非你事先知道你可能的結局是什么,否則你需要一些檢查公共后綴串列的東西,比如php-domain-parser 庫。
uj5u.com熱心網友回復:
你可以使用正則運算式。
preg_match('/^[^.]*\.(?=\w \.\w $)/',$_SERVER['SERVER_NAME'],$matches);
$subdomain = isset($matches[0]) ? trim($matches[0],'.') : '';
echo $subdomain;
這是小提琴
uj5u.com熱心網友回復:
使用parse_url()和strtok()這樣的混合
$url = 'https://anything.example.com/pathurl';
$bits = parse_url($url);
$sub = strtok($bits['host'], '.');
echo $sub;
結果
anything
uj5u.com熱心網友回復:
感謝@IMSoP、@RiggsFolly 和@Jerson。你所有的代碼都很棒:)
供我自己將來參考:
$fulldomain = $_SERVER['SERVER_NAME'];
$matches = null;
preg_match('/^[^.] /', $fulldomain, $matches);
$subdomain = $matches[0];
echo $subdomain;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/404877.html
標籤:
上一篇:如何將屬性作為引數傳遞給Converter并且屬性在串列itemsource背景關系xaml之外-Xamarin
