Shouldn't + be encoded as %2B? According to the spec for application/x-www-form-urlencoded data, the component percent-encode set includes + to be encoded as %2B:
The application/x-www-form-urlencoded percent-encode set is the component percent-encode set and U+0021 (!), U+0027 (') to U+0029 RIGHT PARENTHESIS, inclusive, and U+007E (~).
and the component percent-encode set:
The component percent-encode set is the userinfo percent-encode set and U+0024 ($) to U+0026 (&), inclusive, U+002B (+), and U+002C (,).