从完整 URL 中提取第一个 URL 段

Posted

技术标签:

【中文标题】从完整 URL 中提取第一个 URL 段【英文标题】:Extract first URL Segment from full URL 【发布时间】:2012-08-17 04:36:41 【问题描述】:

如何从完整的 URL 中提取第一个 URL 段?应清理第一个 URL 段以将 - 替换为空格

完整网址

http://www.domain.com/River-Island/River-Island-T-Shirt-with-Triangle-Girl-Print/Prod/pgeproduct.aspx?iid=2516020

所需的输出

River Island

【问题讨论】:

What have you tried? 我试过str_replace() 用空格替换-。不幸的是,我无法弄清楚提取第一个 URL 段的正则表达式部分。 【参考方案1】:

你可以使用:

$url = 'http://www.domain.com/River-Island/River-Island-T-Shirt-with-Triangle-Girl-Print/Prod/pgeproduct.aspx?iid=2516020';
$parsed = parse_url($url);
$path = $parsed['path'];
$path_parts = explode('/', $path);
$desired_output = $path_parts[1]; // 1, because the string begins with slash (/)

【讨论】:

+1 用于使用parse_url,虽然我会使用parse_url($url, php_URL_PATH) 我用过$desired_output = $path_parts[1];,效果很好。 你也可以这样做 //explode("/",trim($path, "/"));去除噪音,使用reset获取第一个元素 //$output=reset($path_parts);【参考方案2】:
$page = explode('/', substr($_SERVER['REQUEST_URI'], 1), 2);
echo str_replace("-"," ", $page[0]);

【讨论】:

【参考方案3】:

试试这个:/http:\/\/[^\/]+\/([^\/]+)/i

请看这里:http://regex101.com/r/lB9jN7

【讨论】:

稍作修改以排除第一段并在 nginx conf 中获取其他所有内容,例如 ^\/[^\/]+\/(.*)。这有助于使用独立的子目录控制器构建对 seo 友好的 url。竖起大拇指!【参考方案4】:
$path = parse_url($url, PHP_URL_PATH);
$first = substr($path, 0, strpos($path, '/'));

查看这三个函数的文档。也许你必须从路径的开头去掉一个斜线,我不确定。

【讨论】:

【参考方案5】:

你有没有使用 CodeIgniter ...???那么它可能是

$this->uri->segment(segment number of url);

以及它需要在Controller中加载uri库

【讨论】:

以上是关于从完整 URL 中提取第一个 URL 段的主要内容,如果未能解决你的问题,请参考以下文章

如何从完整的 html 文本中从 <a> 标记中提取 url GET 参数

如何使用正则表达式从字符串中提取第 n 个 URL?

从 url 查询字符串参数中提取单独的值

如何获取网页的url

从Javascript中的URL中提取一部分[重复]

java 从一个URL中提取特定子字符串保存