【问题标题】:Keep the + in a get request string将 + 保留在获取请求字符串中
【发布时间】:2016-09-14 08:36:20
【问题描述】:

我正在开发一个 parkos 网站,客户可以使用该网站的电子邮件进行预订,但有些客户在他们的电子邮件中使用加号。

例如:

test+parkos@gmail.com

现在,例如,如果客户想查看他们的预订,我将在 url 中创建一个获取请求,您会得到如下内容:

http://test.com/reservations/?email=test+parkos@gmail.com&number=GH76G

之后我尝试检索电子邮件并回显它:

$email = request()->input('email');
{{!! $email!!}}

如果我尝试在其上查看我的网页,这就是我得到的:

test parkos@gmail.com

+ 号不见了,我想知道是否有办法保留 + 号。

【问题讨论】:

  • 使用urlencode和urldecode
  • @Thamilan request()->为你输入使用 urldecode
  • 谢谢,我会试试的
  • @Mixedfruitjuice 您是如何获得test.com/reservations/… 网址的?
  • 这是我编的一个网址,看起来像我用于网站的网址

标签: php laravel get request


【解决方案1】:

Url 是错误的,因为 + 符号根据 CGI 标准有其自身的含义。这意味着一个空格。

正确的网址应该是

http://test.com/reservations/?email=test%2Bparkos@gmail.com&number=GH76G

URLs and plus signs中所述

+ becomes %2B
space becomes %20

为了避免进一步的错误,最好的做法是在 URL 中使用之前对文本进行编码:

$url = "http://" . $domain . "/whatever.php?text=" . urlencode($text);

【讨论】:

    【解决方案2】:

    发送解码后的 url 并获取 $_GET['email']

    urlencode('test+email@gmail.com');
    

    【讨论】:

    【解决方案3】:

    空格字符在 application/x-www-form-urlencoded 键值对中编码为“+”。

    RFC-1866(HTML 2.0 规范),第 8.2.1 段。小段 1. 说:“表单字段名称和值被转义:空格字符被 `+' 替换,然后保留字符被转义”)。

    因此,在解码 URL 时,加号被解码回空格。例如,在您的网址中。

    如果您使用 PHP 构建此 URL,请在每个键/值对上调用 urlencode(),不要连接未编码的字符串。

    http://test.com/reservations/?email=test+parkos@gmail.com&number=GH76G
    

    电子邮件将成为

    test parkos@gmail.com
    

    为防止出现这种情况,请确保 URL 中的“+”字符正确进行了百分比编码,因此正确的 URL 应如下所示:

    http://test.com/reservations/?email=test%2Bparkos@gmail.com&number=GH76G
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多