如何 URL 在 Laravel 中编码 URI 路由参数
How to URL encode a URI route parameter in Laravel
我有一个 URI 需要在路由内传递给控制器。我该如何处理这个问题,或者更具体地说,我如何传递一个通常需要先 URL 编码的字符串?这可能是路由中的正则表达式约束Howhandledy吗?
要传递的字符串
itm:n#_123445
路线
Route::get('getChildren/{uri}', 'ChildrenController@getChildren');
您可以使用 URL
facade 来做到这一点。
完整路径为 Illuminate\Support\Facades\URL
或仅使用 \URL
,因为它已添加到 config/app.php
文件中。
用法:
URL::to('/getChildren', ['itm:n#_123445']));
生成了url:
http://domain.test/getChildren/itm%3An%23_123445
处理
Route::get('getChildren/{url}', function ($url) {
dd($url); // itm:n#_123445
});
希望对您有所帮助
我建议更新您的 table 架构,为数据库中的每个 uri 创建一个唯一 ID(如果它还没有的话)。您可以传递 id,而不是传递完整的 uri 作为参数。
首先,
如果您使用这种特定格式,浏览器会将 #
理解为对页面中锚点的引用 - 就像这个例子:https://laravel.com/docs/7.x/packages#views
并且不会将号码传递给后端 - 正如您提到的,您很可能必须在发送之前对 URL 进行编码
现在,如果您确定后端可以接收此格式,我会在中间件(如果此格式是循环的)或直接在控制器中执行 preg_match 以提取数字 ID。
preg_match('/itm:n#_(\d*)/', $uri , $matches);
$id = matches[0]
我有一个 URI 需要在路由内传递给控制器。我该如何处理这个问题,或者更具体地说,我如何传递一个通常需要先 URL 编码的字符串?这可能是路由中的正则表达式约束Howhandledy吗?
要传递的字符串
itm:n#_123445
路线
Route::get('getChildren/{uri}', 'ChildrenController@getChildren');
您可以使用 URL
facade 来做到这一点。
完整路径为 Illuminate\Support\Facades\URL
或仅使用 \URL
,因为它已添加到 config/app.php
文件中。
URL::to('/getChildren', ['itm:n#_123445']));
生成了url:
http://domain.test/getChildren/itm%3An%23_123445
处理
Route::get('getChildren/{url}', function ($url) {
dd($url); // itm:n#_123445
});
希望对您有所帮助
我建议更新您的 table 架构,为数据库中的每个 uri 创建一个唯一 ID(如果它还没有的话)。您可以传递 id,而不是传递完整的 uri 作为参数。
首先,
如果您使用这种特定格式,浏览器会将 #
理解为对页面中锚点的引用 - 就像这个例子:https://laravel.com/docs/7.x/packages#views
并且不会将号码传递给后端 - 正如您提到的,您很可能必须在发送之前对 URL 进行编码
现在,如果您确定后端可以接收此格式,我会在中间件(如果此格式是循环的)或直接在控制器中执行 preg_match 以提取数字 ID。
preg_match('/itm:n#_(\d*)/', $uri , $matches);
$id = matches[0]