urldecode() 不解码 + 号

urldecode() not decoding the + sign

我正在使用 PayPal 支付系统,我想在自定义字段中发送 2 个值。因此我使用了 urlencode(json_encode()) 功能。一个没有 urlencoding 的例子。

$customData = array();
$customData['invoiceID'] = $invoiceID;
$customData['username'] = urlencode($_GET['username']);

$p->add_field('custom', urlencode(json_encode($customData)));

输出为:

%7B%22invoiceID%22%3A108674%2C%22username%22%3A%22Just%2Btesting%22%7D

urldecoding 和 jsondecoding 时所需的输出:

{"invoiceID":108674,"username":"Just testing"}

但是在 urldecoding 和 jsondecoding 之后它给了我这个:

{"invoiceID":108674,"username":"Just+testing"}

此问题的解决方法是再次对用户名本身进行 urldecode。但是,为什么我必须将 urldecode 加倍才能获得我仅使用一次 运行 此函数进行 urlencode 的值?

您似乎对数据应用了两次 urlencode(),因此您需要应用两次 urldecode() 或删除其中一次。

我认为 "custom" 字段用于在另一端识别您的请求,对吗?因此,该字段供您使用,不适用于 paypal。我认为对其进行编码是个好主意。但是,如果你想让它在 paypals 后端生存,你可能想使用 base64encode 和 base64decode。