【问题标题】:Consolidating multiple GET parameters into a single value将多个 GET 参数合并为一个值
【发布时间】:2011-06-03 12:08:47
【问题描述】:

我不确定我在寻找什么,但目前在我的系统中,我发送了一个长 URL,如下所示:

$name=1&option=2&field=4....

而且很长。因此,如果我有一个值列表,例如:

  • 姓名
  • 选项
  • 字段

我可以将它们放入一个字符串中,我可以在其中的某些点例如通过斜线或其他方式中断。

然后对字符串进行编码,使其完全随机,所以我只有一个字段要发送:

&data=JKHFGDKGLKJHFKDJHFKJDHFKHDF

然后我终于可以解码另一面并分解。

是否有预先构建的功能来执行此操作?

它是什么:

我正在向贝宝发送数据,但我有一些我想发送的自定义变量,现在由于某种原因我的 IPN 没有收到它们,不知道为什么,但如果我添加一个名为 custom 的变量,它会进入 IPN 罚款。所以我想如果我只是发送一个名为 custom 的随机格式然后解码?

【问题讨论】:

  • 你有没有[考虑过]通过POST这样做的可能性?
  • 好吧,如果您对字符串进行编码,使其完全随机,您将无法对其进行解码。你在这里的主要目标是什么?是让 url 更短,还是只是在一个字符串中发送所有数据?
  • 为什么不将数据保存在您的服务器上,并将“随机令牌”映射到它。将令牌发送给 PayPal,谁将返回该令牌,您可以再次查找数据?
  • @salathe,这正是我想做的,也是最简单的选择,我的问题是用户没有注册,所以我没有用户 ID 来保存订单,我打算生成一个随机数,但它有多随机?
  • 肯定没有用户 ID 与屏蔽/编码/发送到 PayPal 的任何数据完全无关?..

标签: php paypal-ipn


【解决方案1】:

您可以简单地对您的数据进行 Base64 编码。

$a = array('name' => '1', 'option' => '2', 'field' => '4');
$temp = json_encode($a);       // convert array to string
$data = base64_encode($temp);  // encode string

输出:

"eyJuYW1lIjoiMSIsIm9wdGlvbiI6IjIiLCJmaWVsZCI6IjQifQ=="

要在 URL 中发送它,您必须再次对其进行编码(就像您必须对要在 URL 中发送的所有数据进行编码一样)

$url = $url . "&data=" . urlencode($data)

通过 JSON 的中间步骤可确保您的数据保持其结构,并且在接收端易于解码。

不利的一面:您的网址会更长。

【讨论】:

  • @Lunar:我不知道这是否能解决您的问题。我建议你试试看。
【解决方案2】:

使用base64_encode,然后使用base64_decode,这将解决您的问题。

【讨论】:

  • 不,不会的。 base64 编码的字符串可能包含+=/,在 URI 中使用是不安全的。
【解决方案3】:

如果您不知道自己在寻找什么,我们无法想象,哈哈。

无论如何,如果我得到你,你可以这样做,考虑到你已经建立了你的字符串:

$string ="$name=1&option=2&field=4";

您可以将其作为单个参数传递:

$data = url_encode($string);   
<a href="url?data={$data}"></a>

除了url_encode,你可以使用base64_encode

【讨论】:

    【解决方案4】:

    正如评论者 (Bobby) 所说 - 当您想要发送更大的数据集并防止您的 URL 变得难以管理的长或丑陋时,请考虑使用 POST。

    GET 变量可以方便地为用户提供他们可以直接添加书签的页面,这在某些情况下是可取的,例如在已填写查询字符串和/或过滤器的搜索页面上,以便用户可以返回定期搜索和检查新结果,而无需重置所有选择。

    如果您不需要那种功能,则 POST 变量会更好,您不需要为 URL 编码/解码它们,并且它们不能直接添加书签(这在许多情况下也是可取的)。

    不过,要回答您最初的问题,如果您真的必须在 URL 上发送变量并且您只想发送一个明显随机的字符串,我建议您编写几个自己的编码/解码函数(因为我假设练习的目的不是为了防止篡改而对其进行加密,只是为了让你的 URL 更友好)。如果对变量可以是什么有限制,这将变得更容易,如果它们可以是任何东西,这将更加困难。

    例如 - 如果您有以下变量和可能的设置:

    • var1 (苹果、香蕉、橙子)
    • var2 (汽车、摩托车、自行车)
    • var3 (红、黄、绿)

    通常情况下,您会创建如下网址:

    http://www.mysite.com/page.php?var1=banana&var2=car&var3=green

    如果您将变量分配给数字(例如)以便 var1、var2 和 var3 为 1、2 或 3 - 那么您可以通过如下 URL 发送:

    http://www.mysite.com/page.php?vars=213

    在另一端将其分解为单个数字,然后将它们转换回“香蕉”、“汽车”和“绿色”。

    但是说真的......我会先看看 POST 除非有非常具体的原因为什么你会使用这种方法 - 我以前用它来缩短 URL 以使其在社交媒体上更易于共享和论坛。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2020-08-21
      • 2014-05-15
      相关资源
      最近更新 更多