2016-03-31 74 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。