2012-11-10 83 views
0

PHP newbie here ..我正在尝试创建一个函数,用户在将商品添加到购物车后重定向到上一页。然而,当他们被重定向回与它下面的代码离开目录的副本(即example.com/catalog/garden-tools/ 园林工具爆炸URL查询字符串问题

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

http://www.php.net/manual/ en/function.implode.php –

+0

感谢Jon。内爆功能将如何实施? –

+0

explode()将字符串转换为数组,implode将数组转换为字符串。explode('/','foo/bar/baz')返回数组('foo','bar','baz'),implode('/',array('foo','bar','baz') )返回字符串'foo/bar/baz'。 –

回答

1

由于URL爆炸时,你得到的数组:? $url[ 0 ] = "http:" $url[ 1 ] = "SOME_STRING"等 你需要检查你的url数组中想要的字符串的索引是什么,并返回它。 像return $url[ 2 ]或任何索引是。

UPDATE

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

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

+0

@IanMcAbee你可以检查更新。 –

+0

啊是的。我得到一个'Array([0] =>)'。这是什么表示? –

+0

这表示一个空数组。这意味着你的URL没有爆炸,可能是因为里面没有“/”。你试图爆炸的URL是什么? –

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并返回园林工具

UPDATE : 也许是一个更简单的方法你会是如下

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

这个Wi将采取example.com/catalog/garden-tools/gardening-glove之类的路径,并切掉最后一页离开example.com/catalog/garden-tools

+0

我正在使用此工具,但仍在获取example.com/catalog/garden-tools/garden-tools。我无法弄清楚如何删除URL中的重复类别,所以它只是example.com/catalog/garden-tools –

+0

如果你正在获取example.com/catalog/garden-tools/garden-tools那么你怎么样URI的第一部分?这个函数的返回值简单地就是'garden-tools',所以你把它附加到某个东西上? – aaronott