Decoding URL parameters with JavaScript
Yes it is true that decodeURIComponent function doesn't convert + to space. So you have to replace the + using replace function.
Ideally the below solution works.
var str_name = 'This+is+a+message+with+spaces';
decodeURIComponent((str_name + '').replace(/\+/g, '%20'));
Like it was pointed out already,
decodeURI
function doesn't convert +
to space, but there are some things worth to realize here:
decodeURI
is meant to be used for whole URI, i.e. it doesn't decode separators like?
,&
,=
,+
, etc.- for decoding parameters
decodeURIComponent
should be used
(worth to have a look at: What is the difference between decodeURIComponent and decodeURI? ) - string that you are trying to decode might actually contain
+
encoded as%2B
, thus you should not replace+
after the conversion since you might lost+
signs that you actually want there, e.g.something?num=%2B632+905+123+4567
should become:something?num=+632 905 123 4567
since you are probably going to extract the number:+632 905 123 4567
So the correct way to do this is:
var str = 'something?num=%2B632+905+123+4567';
decodeURIComponent( str.replace(/\+/g, '%20') );