Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通行证\&引用;及/&引用;通过Laravel路线输入变量_Php_Laravel_Laravel 5.2_Laravel Routing - Fatal编程技术网

Php 通行证\&引用;及/&引用;通过Laravel路线输入变量

Php 通行证\&引用;及/&引用;通过Laravel路线输入变量,php,laravel,laravel-5.2,laravel-routing,Php,Laravel,Laravel 5.2,Laravel Routing,首先,如果这是一个糟糕的问题/做法,请道歉。我对拉威尔很陌生,所以我还在努力 我试图在Laravel 5路径中传递一个包含正向斜杠(/)和反向斜杠()的变量,但遇到了一些困难 我正在使用以下命令:api.dev/api/v1/service/DfDte\/uM5fy582WtmkFLJg== 尝试1: 我的第一次尝试使用了下面的代码,自然产生了404 路线: Route::group(array('prefix' => 'api/v1'), function() { Route::

首先,如果这是一个糟糕的问题/做法,请道歉。我对拉威尔很陌生,所以我还在努力

我试图在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
Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});
public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}
DfDte//uM5fy582WtmkFLJg==
控制器:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::resource('service', 'ServiceController');
});
public function show($service) {
    return $service;
}
404
Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});
public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}
DfDte//uM5fy582WtmkFLJg==
结果:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::resource('service', 'ServiceController');
});
public function show($service) {
    return $service;
}
404
Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});
public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}
DfDte//uM5fy582WtmkFLJg==
尝试2:

我在StackOverflow上做了一些搜索,最后使用了下面的代码,几乎可以正常工作,但是,它似乎正在将\转换为/

路线:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::resource('service', 'ServiceController');
});
public function show($service) {
    return $service;
}
404
Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});
public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}
DfDte//uM5fy582WtmkFLJg==
控制器:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::resource('service', 'ServiceController');
});
public function show($service) {
    return $service;
}
404
Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});
public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}
DfDte//uM5fy582WtmkFLJg==
结果:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::resource('service', 'ServiceController');
});
public function show($service) {
    return $service;
}
404
Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});
public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}
DfDte//uM5fy582WtmkFLJg==
如您所见,它正在传递var,但似乎正在将\转换为/

我试图创建一个API,但不幸的是,我传递的变量超出了我的控制(例如,我不能简单地不使用\或/)

有没有人能给我提些建议或者给我指出正确的方向


谢谢。

你不应该那样做。Laravel会认为这是一个新参数,因为“/”。相反,在参数中使用
htmlentites
html\u entity\u decode
,或者使用
POST

,正如您从对原始问题的评论中所看到的,我试图在URL中传递的变量是我之前使用
json\u encode
的API调用的结果
json_encode
将自动尝试并转义正斜杠,因此将额外的\添加到变量中。我在原始调用中添加了一个
JSON\u UNESCAPED\u SLASHES
标志,瞧,一切正常。

如果
api.dev/api/v1/service/DfDte\/uM5fy582WtmkFLJg==
是一个请求URL,那么请注意它显然是无效的。反斜杠不是URL中的有效字符,您必须对其进行“百分比编码”。或者,如果在现实中您想要避开下面的正斜杠,那么同样地:不要使用反斜杠,而是URL编码斜杠。正如URL请求的正式定义一样。不幸的是\实际上是我试图作为变量传递的ID的一部分。我尝试过对变量进行编码,例如,
DfDte%5C%2FuM5fy582WtmkFLJg%3D%3D
,但这只会导致另一个404使用“尝试2”中提供的代码。当然,我不知道您的数据模型,但包含文本序列的ID对我来说非常不可能。你真的确定这不仅仅是一个用来逃避包含的正斜杠的符号吗?什么“响应”?如果您的意思是从某个先前的请求中接收到该ID,那么肯定会转义正斜杠,使其不同于“普通”文件夹(分隔正斜杠)。这确实没有改变这个事实,即符号不是一个有效的URL。啊,哇,这是一个有趣的结果!祝贺而且。。。你当然不是白痴。作为程序员,我们日常工作的一个重要部分就是理解我们必须处理和处理的人工制品。有时,将一个问题公之于众以获得新的想法和见解是一件好事。有时这是取得进步和学习的唯一途径。这就是我们最后一直在做的:-)小心,祝项目好运!