title: urldecode() not decoding the + sign
body: <p>I am working on a PayPal payment system, I wanna send 2 values in the custom field. Therefor I used the urlencode(json_encode()) functionality. An example of how it looks without urlencoding.</p>
  
  <pre><code>$customData = array();
  $customData['invoiceID'] = $invoiceID;
  $customData['username'] = urlencode($_GET['username']);
  
  $p-&gt;add_field('custom', urlencode(json_encode($customData)));
  </code></pre>
  
  <p>Output is: </p>
  
  <pre><code>%7B%22invoiceID%22%3A108674%2C%22username%22%3A%22Just%2Btesting%22%7D
  </code></pre>
  
  <p>Desired output when urldecoding and jsondecoding:</p>
  
  <pre><code>{"invoiceID":108674,"username":"Just testing"}
  </code></pre>
  
  <p>But it's giving me this after urldecoding and jsondecoding:</p>
  
  <pre><code>{"invoiceID":108674,"username":"Just+testing"}
  </code></pre>
  
  <p>The workaround for this issue is to urldecode the username itself as well once again. But why do I have to double urldecode just to get the value that I urlencoded with just one time running this function?</p>