在 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