如何在laravel 5 url中使用add get parrameters传递斜杠(%2F)

时间:2017-02-08 17:10:53

标签: php regex laravel-5

用户可以搜索我的网站。有时他们可能会使用包含正斜杠的搜索词(使用/斜杠搜索),当表单提交时,会在网址中转换为%2F。

例如。 www.mysite.com/search/search+with+%2F+slash

我使用了here的答案,该答案非常适合给我正确的页面,而不是将我发送给404.

我现在的问题是我在页面上使用分页和自定义过滤器,它们都作为url中的get vars传递,当访问GET var时它是空的。

例如。 www.mysite.com/search/search+with+%2F+slash?page=2

这是我目前的路线

$this->get('search/{search_term}', ['uses' => 'SearchController@search'])
->where('search_term', '(.*(?:%2F:)?.*)');

不确定从这里做什么

1 个答案:

答案 0 :(得分:1)

在URL的路径组件中包含编码斜杠(%2F)不是一个好主意。 The HTTP RFC说这个序列应该与真正的斜杠“等效”:

  

“保留”和“不安全”集中的字符以外的字符(请参阅     RFC 2396 [42])等同于它们的“”%“HEX HEX”编码。

实际上,这些URL的处理方式不一致。一些Web服务器(甚至一些浏览器!)会将%2F视为等效于真正的斜杠,有些会以不同的方式对待它,而某些工具(包括一些Web应用程序防火墙和代理)将拒绝包含此类的URL序列

如果您需要在URL中包含这样的用户输入,则应该将其放在查询字符串(/search/?q=search+with+%2f+slash)中。