0

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 )

可能是什么问题?

4

2 回答 2

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

于 2012-11-10T00:35:23.313 回答
1

一个快速简单的测试看起来像

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

这会产生与您所看到的相同的东西:

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

您看到数组元素 0 为空的原因是由于 explode 的工作方式。它接受一个字符并将其前面的内容粘贴到一个数组元素中,并将其后面的内容粘贴到另一个数组元素中。例如,一/二将像数组(一,二)一样拆分,因为一个在斜杠(/)之前,两个在之后(如预期的那样)

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

在您的代码中,您使用 rtrim() 修剪尾部斜杠,但如果您简单地使用 trim() 修剪前导和尾部斜杠,您将获得更好的结果。

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

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

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

这将带您从 example.com/catalog/garden-tools/gardening-glove 并返回 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

于 2012-11-10T04:55:56.947 回答