【问题标题】:Why urlencode data to post via curl and why not doing the same with form?为什么 urlencode 数据通过 curl 发布,为什么不对表单做同样的事情?
【发布时间】:2015-07-26 08:51:54
【问题描述】:

如 php 手册中所述,urlencode 用于编码 url 的查询部分,那么为什么在通过 curl 发送之前使用 urlencode 对数据进行编码,因为这些是 $_POST 值而不是查询部分?

    foreach ($data as $key => $value) {
             $value = urlencode($value);
             $req .= "&$key=$value";
    }
    //
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req);

如果建议这样做,那么为什么在处理提交的表单之前不需要通过表单对发布的数据进行编码(不是为了 curl,而是我的意思是处理表单。)?

这是否意味着 curl 发送数据的方式与提交的表单不同?

【问题讨论】:

  • 谁说推荐这样做?我看不出有任何意义。
  • 提交表单时,浏览器会自动对输入内容进行 URL 编码。
  • 谢谢 barmar,1) 所以我总是用 curl 做 urlencode 会更好吗? 2)从curl接收到发布的数据后不需要urldecode?​​span>
  • 3) 我应该注意数据没有被 urlencoded 两次吗?例如,用户提交一个表单(数据由浏览器自动 urlencoded)然后在下一页数据将通过 curl 发布,所以我应该小心 urlencoding 不会发生两次?或者,如果我保留那个 urlencoding forach 以通过 curl 在下一页通过表单发送发布的数据仍然没有问题?
  • @user4271704 你不需要在接收脚本中使用urldecode(),因为PHP在填写$_POST时会自动这样做。

标签: php curl urlencode


【解决方案1】:

你可以这样做:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

而不是foreach 循环。当你给出一个数组时,参数会使用multipart/form-data 编码发布。

您不应该在处理表单中调用urldecode,因为PHP会在将参数放入$_GET$_POST之前自动解码。

【讨论】:

  • 谢谢,正如你所说,curl 如果数据是数组,它将使用multipart/form-data 发送,那么为什么有些代码在发送之前对数组进行 urlencode 呢?好像没用?对吗?
  • 因为他们不明白 PHP 会自动为他们做这件事。
  • 同一件事有多种方法。
  • 不,这只是另一种方式。
  • 对不起,我不明白,反正这个foreach是推荐的还是没有太多必要?
猜你喜欢
  • 2014-06-16
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2014-08-27
  • 2019-12-30
相关资源
最近更新 更多