【问题标题】:How to pass forward slash (%2F) in laravel 5 url with addition get parrameters如何在laravel 5 url中通过成瘾获取参数传递正斜杠(%2F)
【发布时间】:2017-02-08 17:10:52
【问题描述】:

用户可以搜索我的网站。有时他们可能会使用包含正斜杠(使用 / 斜杠搜索)的搜索词,当表单提交时,该搜索词会在 url 中变为 %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:)?.*)');

不知道从这里做什么

【问题讨论】:

  • 您不必处理 url 中的编码字符。这就是为什么我认为您必须使用更简单的正则表达式,我认为您也必须转义 ?
  • 我不擅长正则表达式。也许你可以提供一个正则表达式解决方案

标签: php regex laravel-5


【解决方案1】:

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

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

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

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

【讨论】:

  • 实际上,RFC 说它等同于 HEX 编码,因为 / 是保留集的一部分。
  • 投反对票,因为近 3 年没有变化也没有答案。这在 Github 上也是一个有争议的问题,因为 Laravel 显然 违反了 RFC。见这里:github.com/laravel/framework/pull/4338
猜你喜欢
  • 2017-11-08
  • 2011-08-27
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2016-02-06
  • 2020-05-21
相关资源
最近更新 更多