gpt4 book ai didi

mysql - Laravel 路由参数未修剪(添加空格时正常工作)

转载 作者:行者123 更新时间:2023-11-29 02:11:33 24 4
gpt4 key购买 nike

我在 web.php 中有以下路由:

Route::get('posts/{encoded_id}/{slug}', 'PostController@show')

...而且效果很好:

http://example.test/posts/1Dl89aRjpk/this-is-some-title

但“问题”是当我在路由参数的末尾添加一个空白时它也会工作 {encoded_id} :

http://example.test/posts/1Dl89aRjpk /this-is-some-title

// or

http://example.test/posts/1Dl89aRjpk%20 /this-is-some-title

// or

http://example.test/posts/1Dl89aRjpk%20%20 /this-is-some-title

在末尾添加空格 - 这将正常工作并且没有没有 404:

Post::where('encoded_id', $encoded_id)->firstOrFail();

...但是为什么? 我怎样才能让它失败(给出 404)?

可能是因为数据库中的字段类型(CHAR)?

$table->char('encoded_id', 10)

如果这就是原因 - 是否有任何方法可以 databases.php 中配置 MySQL 以防止出现这种情况?

或者它可能与 .htaccess 有关(我正在使用 XAMPP/Windows)?

我正在使用 Laravel 5.6。

编辑:

我问的是为什么会发生这种情况以及如何防止它发生,而不是如何调整路由参数。例如,在 stackoverflow url 的 question id 末尾添加空格,您将得到 404:

https://stackoverflow.com/questions/51068436 /laravel-route-parameters-not-trimmed-it-normally-works-when-whitespace-is-added

最佳答案

这是由于预期的 SQL 行为。在您的 Controller 中,您会收到带空格的完整 $encoded_id。 Laravel 为您所做的一切,就是使用 WHERE 调用 SQL 选择查询。 SQL 忽略 WHERE 比较中的尾随空格。

查看此 question .

如果您想要 404,请将 ID 中的空格替换为一些虚拟字符:

$encoded_id = str_replace(' ', '#', $encoded_id);

仅当可以保证 ID 不包含空格或散列标记时才执行此操作。

关于mysql - Laravel 路由参数未修剪(添加空格时正常工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51068436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com