urldecode()未对+符号进行解码



我正在开发PayPal支付系统,我想在自定义字段中发送2个值。为此,我使用了urlencode(json_encode())功能。没有url编码的情况下的外观示例。

$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

url解码和jsondecoding时所需的输出:

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

但它在url解码和jsondecoding之后给了我这个:

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

这个问题的解决方法是再次对用户名本身进行url解码。但是,为什么我必须加倍urldecode,只需运行一次这个函数就可以获得我编码的值呢?

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

我认为"自定义"字段用于识别另一端的请求,对吗?所以,这个字段是供你使用的,而不是贝宝。我认为对它进行编码是个好主意。但是,如果你想让它在付费伙伴的后端生存下来,你可能需要使用base64encode和base64decode。

最新更新