首页 > 解决方案 > 搜索查询参数

问题描述

我想搜索其中包含“+”的电子邮件。例如像这样的东西myemail.subdomain+1@domain.com

网址 -https://example.com?searchKey=myemail.subdomain+1@

我正在使用 Laravel,这个参数是从路由中获取的, $request->get('searchKey'); 但它正在将 '+' 转换为 ' ' ,因此我得到 searchKey 为myemail.subdomain 1@

从而导致不正确的结果。有什么帮助吗?

标签: laravelsearchroutes

解决方案


PHP 假定+来自 GET 请求是一个空格。右编码的加号是%2B. 您只需从请求中准备字符串即可保存加号:

$searchKey= urlencode(request()->get('searchKey'));

在你的情况下,你会得到@as %40。然后您可以用正确的代码替换加号并对其进行解码。但是要小心通常的空间!

$searchKey = urlencode(request()->get('searchKey'));
$searchKey = urldecode(str_replace('+', '%2B', $searchKey));

https://www.php.net/manual/en/function.urlencode.php https://www.php.net/manual/en/function.urldecode.php

PS我想这不是最好的解决方案,但它应该可以。

PPS 或者,如果您可以%2B在搜索参数之前将 plus 准备好,请执行此操作


推荐阅读