如何在PHP中获取URL字符串的最后一部分

时间:2019-01-22 09:52:27

标签: php url

我使用的是$dir变量,它给出了以下路径:

uploads/sha256/aaa

uploads/sha256/aaa/subaaa

uploads/sha256/aaa/subaaa/subsubaaa

变量$UserID产生sha256

我该如何在sha256的之后抓住零件?

因此,仅抓住aaaaaa/subaaaaaa/subaaa/subsubaaa

4 个答案:

答案 0 :(得分:1)

假设“ sha256”是用户生成的sha-256哈希值,该值将针对每个用户而变化,因此您需要忽略它并关注URI中的固定内容,即斜杠。解决它的一种方法是使用正则表达式:

$string = "uploads/sha256/aaa/subaaa/subsubaaa";
preg_match("/uploads\\/[^\\/]+\\/(.*)/", $string, $matches);
var_dump($matches[1]);

string(20) "aaa/subaaa/subsubaaa"

https://3v4l.org/QcPcl

答案 1 :(得分:1)

执行此操作的最佳方法是使用explode函数。这将在特定的分隔符处分割字符串。然后,您可以获得返回的数组的最后一个值,该值将是$ userId之后的字符串。

$dir = explode($UserID . '/', $dir);
echo $dir[1];

答案 2 :(得分:0)

使用sha256/分解字符串,数组中的第二项将成为您所需的部分。

   $x = explode('sha256/', "uploads/sha256/aaa/subaaa/subsubaaa");
   var_dump($x[1]);

答案 3 :(得分:0)

$array = explode("sha256/",$dir);//divides the string into array elements using 'sha256/' as breaking point note the trailing lash
$last = end($array);//grabs last element in array or in this case everything after sha256/

如果您trust $ UserID,则可以这样动态地进行操作:

$array = explode($UserID."/",$dir);//divides the string into array elements using $UserID as breaking point beware of ill input
$last = end($array);//grabs last element in array or in this case everything after sha256/

您应该了解目录遍历以及涉及用户输入和目录的攻击。例如,如果用户标识可以是aaa或subaaa,那么您将具有不可预测的行为。