2013-05-01 63 views
0

我想用連字符替換空格和正斜槓,例如www.example.com/car/bmw/porsche其中bmw/porsche是一個值..但它似乎並沒有爲正斜槓工作。在URL中用連字符替換空格和正斜線php

這是我有其運作空間:

$name = str_replace("-", " ", $request[2]); 
$id = $category->find_id_by_name($name); 

但是當我添加它正斜槓,這是行不通的。雖然它仍然適用於空間:

$name = str_replace(array("-","//"), " ", $request[2]); 
$id = $category->find_id_by_name($name); 

我該如何改變這個工作?

編輯

所以我改變了代碼如下:

$char = " "; 
$name = str_replace("-", $char, $request[2]); 
$id = $category->find_id_by_name($name); 

然後我把$char陣列中的這樣$char = array(" ", "/");這給了我如下:Notice: Array to string conversion然後我試圖讓他們由他們的索引是這樣的:

$name = str_replace("-", $char[0], $request[2]);<-- works for forward slash but not space 

$name = str_replace("-", $char[1], $request[2]);<-- works for space but not forward slash 

我只是不能似乎讓他們一起工作:(


[NEW編輯]

class CarController extends Zend_Controller_Action { 

    public function indexAction() { 

     $category = new Application_Model_CarMapper(); 
     $gcat = $this->getRequest()->getPathInfo(); 

     $request = explode("/", $gcat); 
     //die(print_r($request)); 

     if (isset($request[2])) { 
      $char = array("/"," "); 
      $name = str_replace("-", $char, $request[2]);//<-- "-" and "$char swapped over" 
      $id = $category->find_id_by_name($name); 
      $this->view->title = $id['name']; 
      //die(print_r($request)); 

      $this->view->selectsub = $category->get_sub_cat_select($id['id']); 


     } 
    } 

} 

VAR DUMP

array (size=4) 
    0 => string '' (length=0) 
    1 => string 'car' (length=3) 
    2 => string 'bmw-porsche' (length=11) 
    3 => string '' (length=0) 
+0

你在哪裏定義$ request [2]變量?你可以發佈'var_dump($ request);'的結果嗎? – Frank 2013-05-01 16:32:07

+0

請看我上面的編輯...我已經顯示了完整的代碼 – ash 2013-05-02 09:20:35

+0

$ name有什麼值?我認爲在這個例子中,你最終希望它成爲寶馬保時捷。你究竟得到了什麼? – Belinda 2013-05-02 09:32:56

回答

1

您可以使用urlencode()此:

$myUri = "Bmw/Porsche"; // Or set it accordingly by retreiving from your database 
$uriCompatible = urlencode($myUri); // Results in "Bmw%2FPorsche" 
$myUrl = "www.example.com/car/" . $uriCompatible; 

你可以使用urldecode()中檢索它:

echo $request[2]; // Results in "Bmw%2FPorsche" 
$myUri = urldecode($request[2]); // Results in "Bmw/Porsche"; 
+0

這個例子如何與我上面提供的代碼一起工作?有很多值,所以你已經顯示的代碼,它會很長時間囉嗦,我希望它能與我以上的工作 – ash 2013-05-03 09:21:45

+0

你可以通過'urlencode()'運行你所有的變量,然後將它們連接到任何URL。在你的情況'urlencode($ request [2])'。 – Aquillo 2013-05-03 09:24:06

+0

編輯,有一件事對我來說還不清楚,您是否在嘗試構建一個有效的URL,其中的值是一個值,或者您是否嘗試從提供的URL中檢索此值?在後一種情況下,您如何知道哪些斜線是價值的一部分,哪些不是? – Aquillo 2013-05-03 09:25:56

0

使用單引號,而不是雙,它會工作。像這樣:

$name = str_replace(array('-','/'), " ", $request[2]); 
$id = $category->find_id_by_name($name); 
+0

我也試過這個,但很不幸仍然沒有工作 – ash 2013-05-01 09:49:12

0

您不必逃避「/」。 backslashed需要在這裏逃脫,但不是前面的斜線。

$name = str_replace(array("-","/"), " ", $request[2]); 
$id = $category->find_id_by_name($name); 
+0

我也試過這個,但很遺憾還是不行的 – ash 2013-05-01 09:45:44

0

您不需要轉義正斜槓。試試這個

$name = str_replace(array("-",'/'), " ", $request[2])); 
+0

我也試過這個但是很不幸仍然不行 – ash 2013-05-01 09:49:52

0

試試這個

$name = str_replace(array("-","/"), " ", $request[2]); 
+0

我也試過這個, t工作 – ash 2013-05-01 09:46:35

1

I am trying to replace a space and forward slash in a url with a hyphen

那麼你應該有

$name = str_replace(" ", "-", $request[2]); 

$name = str_replace(array(" ","/"), "-", $request[2]); 
+0

這也行不通,我認爲我的str_replace工作有點向後,所以我很倔強,我將不得不把正斜槓在空間的數組,但我不知道如何去這個 – ash 2013-05-01 09:57:52

+0

既然你注意到它可能會倒退,你能執行這個並告訴我它輸出了什麼嗎? str_replace(「A」,「B」,「AB」); – nvanesch 2013-05-01 10:19:47

+0

@nvanesch ..'BB'它用'B'取代'A' – Amir 2013-05-01 10:32:10