2012-11-10 82 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