爆炸URL查询字符串问题

时间:2012-11-10 00:12:51

标签: php arrays url explode

PHP新手在这里..我正在尝试创建一个功能,用户在将项目添加到购物车后重定向回上一页。但是,当使用下面的代码重定向它们时,会留下目录的副本(例如:example.com/catalog/garden-tools/garden-tools

function custom_add_to_cart_redirect() {
    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $url = explode('/', rtrim($_SERVER['REQUEST_URI_PATH'], '/'));
    return $url[3];
}

print_r显示以下内容:

Array ( [0] => [1] => thefarmshop [2] => catalog [3] => garden-tools [4] => gardening-glove )

问题是什么?

2 个答案:

答案 0 :(得分:1)

由于url被爆炸,你会得到一个数组: $url[ 0 ] = "http:" $url[ 1 ] = "SOME_STRING"等等。 您需要检查url数组中所需字符串的索引是什么并将其返回。 像return $url[ 2 ]或索引一样。

<强>更新

function custom_add_to_cart_redirect() {
    $url = explode('/', substr($_SERVER['HTTP_REQUEST'], 1));
    print_r( $url );
}

print_r( $array )显示$array结构,包括索引和值。

答案 1 :(得分:0)

对此进行快速简单的测试看起来像

$uri = '/test/uri/just/cause/';
print_r(explode('/', $uri));

你会看到同样的事情:

Array
(
    [0] => 
    [1] => test
    [2] => uri
    [3] => just
    [4] => cause
    [5] => 
)

您将数组元素0视为空的原因是由于爆炸的方式起作用。它需要一个字符,并将它前面的内容粘贴到一个数组元素中,以及在另一个数组元素中后面的内容。例如,一个/两个将被分割为数组(一,二),因为一个在斜杠(/)之前,两个在之后(如预期的那样)

但是,如果之前或之后没有任何内容,您将获得一个空元素,如上例所示。

在你的代码中使用rtrim()来修剪尾部斜杠,但是如果你只是使用trim()来修剪前导斜杠和尾部斜杠,你会得到更好的结果。

$url = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));

为了您的回归,您可能会寻找

return $uri[count($uri) - 2];

这将带你从example.com/catalog/garden-tools/gardening-glove和return garden-tools

更新: 或许对你来说更简单的方法如下

$uri = rtrim($_SERVER['REQUEST_URI_PATH'], '/');
$uri = substr($uri, 0, strrpos($uri, '/'));

这将采用例如example.com/catalog/garden-tools/gardening-glove之类的路径并切掉最后一位,离开example.com/catalog/garden-tools