在web 開發中,提取URL 中的域名是一個常見需求。 PHP 提供了很多函數來幫助我們操作字符串,其中stristr函數就可以用來提取和操作URL 中的域名。今天我們就來探討如何使用stristr來實現這一目標。
stristr是PHP 中的一個字符串函數,它用於查找一個字符串首次出現的位置,並返回從該位置到字符串末尾的所有內容。與strpos不同的是, stristr會忽略大小寫,這對於處理URL 中的域名來說特別方便,因為域名在大多數情況下不區分大小寫。
<span><span><span class="hljs-title function_ invoke__">stristr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$before_needle</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$haystack :目標字符串,通常是我們要從中提取信息的URL。
$needle :要搜索的子字符串,這裡我們會使用"://”,來幫助我們確定域名的開始位置。
$before_needle :可選參數,若設置為true ,則返回匹配到的部分之前的內容;若為false (默認),則返回匹配到的部分及其後面的內容。
接下來,我們以從URL 中提取域名為例來介紹stristr的實際應用。假設我們有如下URL:
<span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">"https://www.example.com/path/to/page?query=123"</span></span><span>;
</span></span>
我們希望從這個URL 中提取出域名部分,即www.example.com 。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">"https://www.example.com/path/to/page?query=123"</span></span><span>;
</span><span><span class="hljs-comment">// 使用 stristr 查找 '://' 後的部分</span></span><span>
</span><span><span class="hljs-variable">$domain_part</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stristr</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>, </span><span><span class="hljs-string">'://'</span></span><span>);
</span><span><span class="hljs-comment">// 如果找到了,去掉 '://' 和路徑部分</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$domain_part</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// 去掉 '://' 並截取到第一個 '/' 之前的部分</span></span><span>
</span><span><span class="hljs-variable">$domain</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$domain_part</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$domain_part</span></span><span>, </span><span><span class="hljs-string">'/'</span></span><span>) - </span><span><span class="hljs-number">3</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"域名是: "</span></span><span> . </span><span><span class="hljs-variable">$domain</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"URL 格式無效"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
stristr($url, '://') :首先我們用stristr查找:// ,它標誌著URL 中域名部分的開始。 stristr會返回從://後面的部分,如果找不到它會返回false 。
substr($domain_part, 3, strpos($domain_part, '/') - 3) :在找到://後,我們通過substr和strpos截取域名部分。 substr從://後的第三個字符開始截取,直到URL 中第一個/出現的位置。
echo "域名是: " . $domain; :最後,輸出提取的域名。
URL 格式:我們假設輸入的URL 是合法的並且符合規範。如果URL 沒有:// , stristr就無法正常工作。因此在處理URL 時,最好先對其進行驗證或添加異常處理邏輯。
子域名問題:如果URL 包含子域名,比如blog.example.com ,上述代碼仍然可以正確提取完整的域名(包括子域名)。
不同的協議:如果URL 使用了不同的協議(例如http , https , ftp ), stristr同樣適用,因為它忽略了大小寫。
使用stristr函數從URL 中提取域名是一個簡單且高效的方法。通過組合stristr和substr ,我們能夠輕鬆地定位域名部分並提取出我們需要的信息。在實際開發中,這個方法非常適合處理包含路徑和查詢參數的URL,同時確保對大小寫的忽略。
相關標籤:
URL