使用PHP拆分URL

3
我正在创建一个PHP代理,它接受一个URL,并确认它在我的服务器列表中。
当从应用程序导入URL时,我遇到了一个问题,我需要2个解析器标签。我需要沿着“\?”标记以及字符串(在我的情况下是“export?”)进行拆分。
我正在使用preg处理第一个标签。它是否接受像我的导出标记这样的字符串,或者有其他方法可以做到这一点?
请告诉我如何完成此操作,或者如果您有更多问题,请让我知道。

1
你目前尝试了什么?能否添加一些代码,例如一些输入字符串和你正在使用的正则表达式? - Spiny Norman
8
你试过使用parse_url而不是正则表达式吗? - ircmaxell
我尝试使用原始代理中包含的preg_split方法。最大的问题源于我的URL类似于http://www.domain.com/subfolders/?或http://www.domain.com/subfolders/export?。 - crazywill32
4个回答

14

正如ircmaxell在评论中所述,PHP已经有了解析URL的函数:parse_url

当你有了URL路径(我假设你的export?是路径后缀加上查询标识符),你可以使用explode将路径分割成其路径段:

$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', $path);

您可以使用以下任一方式获取最后一个路径段:

end($segments)
$segments[count($segments)-1]

为了应对尾部斜杠,你可以使用 rtrim($path, '/') 来移除它们。

最终代码:

$url = 'http://www.example.com/subfolders/export?';
$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', rtrim($path, '/'));
echo end($segments);

这似乎对我不起作用。它不允许我查看您的示例代码的结果。如果导出后有JSON字符串,该字符串会发生什么? - crazywill32
@user548869:哦,没错,array_slice返回一个数组。尝试使用其他变体之一。 - Gumbo

0

正则表达式是字符串匹配,也可能包括变量匹配。因为?包含在?中,所以您必须进行两次分割。首先在export?上进行一次分割,然后在每个使用?作为分隔符的字符串上进行第二次分割。如下所写,您只是在两个不同的字符串中进行分割。

$first = preg_split('export\?', ...);
for ($first) {
        array_push ($second,preg_split('\?', ...)');
}

那不是完全有效的 PHP,但我希望它足够接近于伪代码。


0

正则表达式应该可以解决问题,类似下面的内容就可以工作。这是Django在其URL调度程序中使用的内容。

r'^export/$'

1
这并没有太大帮助。它不会根据模式进行分割,只会针对非绝对URL(^表示行的开头,$表示行的结尾)。 - John Giotta

0

大家好,我最终使用了一个explode函数来查找字符串(export?),然后我使用preg_split命令来搜索\?。这为我提供了我正在寻找的部分。谢谢大家。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接