`decodeURIComponent` правильно делать уже после того как строка разбита на ключ-значение, см реализацию в ноде https://github.com/joyent/node/blob/master/lib/querystring.js#L152