gpt4 book ai didi

php - 使用 PHP 解析 URL 中的相对路径

转载 作者:行者123 更新时间:2023-12-04 00:57:46 25 4
gpt4 key购买 nike

示例 1:domain.com/dir_1/dir_2/dir_3/./../../../应该在浏览器中自然解析成= domain.com/
示例 2:domain.com/dir_1/dir_2/dir_3/./../../../test/././../new_dir/应该解析成domain.com/new_dir/
示例 3:domain.com/dir_1/dir_2/dir_3/./../../../test/dir4/../final应该解析成domain.com/test/final
我怎样才能遍历字符串来做到这一点?我感觉像for()循环会在这一点上感到困惑。

Transform relative path into absolute URL using PHP中提供的答案和 PHP: How to resolve a relative url在这种情况下不适合我。我不应该需要一个引用点(基础),因为目标是清理我已经拥有的东西。

这不是 PHP - Failed to open stream : No such file or directory 的副本

最佳答案

这是一个比您正在考虑的问题更简单的问题。您所需要做的就是explode()/字符,并使用堆栈解析出所有单独的段。当您从左到右遍历数组时,如果您看到 . , 没做什么。如果您看到 .. ,从栈中弹出一个元素。否则,将一个元素压入堆栈。

$str = 'domain.com/dir_1/dir_2/dir_3/./../../../';
$array = explode( '/', $str);
$domain = array_shift( $array);

$parents = array();
foreach( $array as $dir) {
switch( $dir) {
case '.':
// Don't need to do anything here
break;
case '..':
array_pop( $parents);
break;
default:
$parents[] = $dir;
break;
}
}

echo $domain . '/' . implode( '/', $parents);

这将正确解析所有测试用例中的 URL。

请注意,错误检查留给用户作为练习(即当 $parents 堆栈为空并且您尝试从中弹出某些内容时)。

关于php - 使用 PHP 解析 URL 中的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14883501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com