Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

This should simple task, but I can't seem to find a solution.

I have a basic string that is being passed through as a query string parameter like this one: This+is+a+message+with+spaces. I would like to decode that parameter using Javascript to This is a message with spaces, but I cannot seem to get it to decode.

I've tried decodeURI('This+is+a+message+with+spaces') but the result still contains the + signs.

Any help would be appreciated. Thank you!

share|improve this question
1  
1  
The URL needs to be encoded to be decoded ;) –  davidbuzatto Aug 20 '12 at 18:02
1  
Locrizak, decodeURIComponent('This+is+a+message+with+spaces') still returns This+is+a+message+with+spaces. encodeURIComponent('This+is+a+message+with+spaces') returns This%2Bis%2Ba%2Bmessage%2Bwith%2Bspaces. I must be missing something because I'm not seeing how this is solving my problem. –  user852367 Aug 20 '12 at 18:02

3 Answers 3

up vote 7 down vote accepted

The plus sign is not encoded/decoded. To see the decode function working, you need to pass a encoded URI first. Take a look:

encodeURI( "http://www.foo.com/bar?foo=foo bar jar" )

Will generate: http://www.foo.com/bar?foo=foo%20bar%20jar, i.e., the encoded URI.

decodeURI( "http://www.foo.com/bar?foo=foo%20bar%20jar" )

Will generate: http://www.foo.com/bar?foo=foo bar jar, i.e., the decoded URI.

share|improve this answer

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'));
share|improve this answer
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') );
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.