【问题标题】:preg_quote issue in Laravel projectLaravel 项目中的 preg_quote 问题
【发布时间】:2019-03-04 02:22:05
【问题描述】:

我正在 Laravel 的搜索功能中测试 preg_quote() 功能。我发现了一个奇怪的行为——“+”不是转义,而是从输出中删除。

preg_quote("a + b"); // "a b"

尝试在没有 laravel 人员的情况下从 cli 调用相同的函数

php test.phpa // a \+ b

似乎 Laravel 对功能/输出/其他东西产生了一些影响......

Laravel 5.7。 / php 7.3.1

【问题讨论】:

  • 你能告诉我们你的搜索功能,你如何输出它,以及到哪里? URL 中的+ 符号是生成的$_GET 参数中的一个空格,需要编码为%2B
  • 我正在使用邮递员进行测试。请求:http://localhost:8000/api/users?skip=0&search=a + b 函数第一行:dd(preg_quote($request->search)); 主要问题是“+”是唯一一个没有转义的特殊字符。我已经用函数文档中所有特殊字符的字符串进行了测试。
  • @ceejayoz 这个请求. \ + * ? [ ^ ] $ ( ) { } = ! < > | : - 我有这个输出`\。 \\ * \? [ \^ ] \$ ( ) \{ \} \= \! \ \| \: \- ` - 一切都被转义,“+”被忽略/删除。

标签: php laravel preg-quote


【解决方案1】:

我正在使用邮递员进行测试。请求:http://localhost:8000/api/users?skip=0&search=a + b函数第一行:dd(preg_quote($request->search));

正如我所怀疑的,这不是 PHP 或 Laravel 的问题,但您的 URL 参数应该是 urlencoded。 (如果你是 GETing 通过 <form> 元素,或者使用 Laravel 的内置 URL 构建器构建 URL,则会发生这种情况,但如果你正在发出手动 Postman 请求,这取决于你。)

URL 查询字符串中的+ 对应于服务器上的一个空格。它必须转义为%2B,像# 这样的字符也必须转义。您可以通过urlencode 完成此操作。

http://localhost:8000/api/users?skip=0&search=a%20%2B%20b

【讨论】:

  • 天啊!!!你是对的(((奇怪它适用于所有其他角色。非常感谢!
猜你喜欢
  • 2020-05-29
  • 2017-05-09
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2016-01-12
  • 2020-12-08
相关资源
最近更新 更多