PDA

View Full Version : Properly Encoding URL that contain spaces


vantastic
01-24-2012, 08:35 PM
Hello

I'm trying to figure out a way to encode url's that contain spaces. Normally I'd manually type %20 as needed, however what I'm doing is part of a form that creates a thread. Allow me to explain.

A user fills out a form with their country, the form is submitted and the variable is pulled for the country to show the flag. The code is something like this:

http://test.com/images/flags/{qo_01}.png


If the country is more than one word then problems start to happen. The resulting output code is something like this.

[img]http://test.com/images/flags/United States
Notice its all broken because it auto-parses the url and breaks at the first space character. Actually it's a lot worse at the beginning it will include actual HTML for the bbcode, but for demonstrative purposes, this is the part that concerns me.

It should be:

[img]http://test.com/images/flags/United%20States.png


The variable {qo_01} needs to have any spaces substituted with the %20 characters.

I know how to do this in php, but is there some inline <vb: xx> function that can help? I've thought about BBCode for it too, but haven't tried anything.

Thanks in advance!

Van

nerbert
01-24-2012, 10:23 PM
Suppose you have someting like this:

<input type="text" id="countryname" />

<input type="submit" value="Submit" />

Add an onclick to the submit button like this

<input type="submit" value="Submit" onclick="encode()" />


<script type="text/javascript">
<!--
function encode() {
var counrtyname = fetch_object('countryname').value;
countryname=PHP.urlencode(countryname);
fetch_object('countryname').value=countryname;
}
//-->
</script>


I think that would do it.

vantastic
01-24-2012, 10:53 PM
Hi nerbert

Thanks for the response. I was hoping I didn't have to modify any templates as this would affect future updates of the mod I need it for (https://vborg.vbsupport.ru/showthread.php?t=234385)

I guess I just need to bite the bullet...

thanks :)

kh99
01-24-2012, 11:19 PM
There is a {vb:urlencode variable} that may do what you want.

vantastic
01-24-2012, 11:35 PM
kh99

so VERY close! It's substituting spaces with "+" instead of %20

kh99
01-24-2012, 11:51 PM
Yeah, it calls urlencode() which connverts special characters to %XX except spaces, which get changed to + for some reason. Oh well...

nerbert
01-25-2012, 12:37 AM
Try encodeURI() instead of PHP.urlencode().

http://www.w3schools.com/jsref/jsref_encodeuri.asp

PHP.urlencode() is a vBulletin function and it seems to be the opposite of urldecode() in PHP.