2016-03-31 107 views
4

首先,如果這是一個糟糕的問題/實踐,請道歉。我對Laravel非常陌生,所以我仍然在努力解決它。通過Laravel在變量中傳遞「」和「/」

我試圖在Laravel 5路由中傳遞包含正斜槓(/)和反斜槓()的變量,並且遇到一些困難。

我使用下面的方法:api.dev/api/v1/service/DfDte\/uM5fy582WtmkFLJg==

嘗試1:

我第一次嘗試用下面的代碼和自然導致一個404

路線:

Route::group(array('prefix' => 'api/v1'), function() { 
    Route::resource('service', 'ServiceController'); 
}); 

控制器:

public function show($service) { 
    return $service; 
} 

結果:

404 

嘗試2:

我做了一些StackOverflow上搜索,並最終使用下面的代碼,這幾乎是工作,但是,這似乎是轉換\ 至 /。

路線:

Route::group(array('prefix' => 'api/v1'), function() { 
    Route::get('service/{slashData}', '[email protected]') 
    ->where('slashData', '(.*)'); 
}); 

控制器:

public function getData($slashData = null) { 
    if($slashData) { 
     return $slashData; 
    } 
} 

結果:

DfDte//uM5fy582WtmkFLJg== 

正如你所看到的,它傳遞var,但似乎將\轉換爲/。

我試圖創建一個API,不幸的是我傳遞的變量超出了我的控制範圍(例如,我不能簡單地不使用\或/)。

有沒有人有任何建議或可以指出我在正確的方向嗎?

謝謝。

+4

如果'api。dev/api/v1/service/DfDte \/uM5fy582WtmkFLJg =='應該是一個請求URL,然後注意它顯然是無效的。反斜槓在URL中不是一個有效的字符,你必須「百分比編碼」它。或者,如果實際上您想要轉義下面的正斜槓,則同樣:不要使用反斜槓,而是使用URL編碼斜線。正如URL請求的正式定義一樣。 – arkascha

+0

不幸的是\ \實際上是我想作爲變量傳遞的ID的一部分。我試過編碼這個變量,例如'DfDte%5C%2FuM5fy582WtmkFLJg%3D%3D',但這隻會導致另一個404使用「嘗試2」中提供的代碼。 – tombraider

+1

當然,我不知道你的數據模型,但是包含文字序列'\ /'的ID聽起來對我來說不太可能。你真的確定這不僅僅是爲了逃避包含正斜槓的符號嗎? – arkascha

回答

0

正如您從原始問題的評論中可以看到的,我試圖在URL中傳遞的變量是之前API調用的結果,我使用的是json_encodejson_encode將自動嘗試並跳過正斜槓,因此將另外的\添加到變量中。我添加了一個JSON_UNESCAPED_SLASHES標誌給原來的電話,瞧,一切都按預期工作。

0

你不應該那樣做。因爲「/」,Laravel會認爲它是一個新參數。相反,在參數中使用htmlentitites和html_entity_decode,或使用POST。