Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Decoding URL parameters with JavaScript

This should be a 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.

like image 944
user852367 Avatar asked Aug 20 '12 17:08

user852367


People also ask

What does decodeURIComponent do in JavaScript?

The decodeURIComponent() function decodes a Uniform Resource Identifier (URI) component previously created by encodeURIComponent or by a similar routine.

What is encodeURI and decodeURI in JavaScript?

encodeURI() and decodeURI() functions in JavaScript. The encodeURI() function encodes the complete URI including special characters except except (, / ? : @ & = + $ #) characters. The decodeURI() function decodes the URI generated by the encodeURI() function.


2 Answers

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 image 73
Supriti Panda Avatar answered Oct 07 '22 16:10

Supriti Panda


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') ); 
like image 20
LihO Avatar answered Oct 07 '22 17:10

LihO