Para que no salgan las variables por la URL una solución es enviarlas por POST en vez de GET.
Respecto al
%20, algunos navegadores sustituyen el espacio en blanco por la cadena
%20 ![Afirmando](http://static.forosdelweb.com/fdwtheme/images/smilies/afirmar.gif)
. Lo único que se me ocurre es que o evitas los espacios en blanco o colocas tú un carácter concreto que te permita posteriormente volver a colocar espacios cuando los necesites. No sé si me expliqué.
Antes de enviar la variable sustituyes los espacios en blanco por el carácter
+, por ejemplo. Cuando vayas a mostrar el valor de esas variables vuelves a sustituir el carácter
+ por espacios en blanco.
Más o menos es lo mismo pero al menos limpia un poco más el código los caracteres + en vez de
%20. Aunque si te decides por el envío mediante el método POST, todo esto no te haría falta ya que lo de colocar la cadena
%20sólo es de algunos navegadores en la barra de direcciones.
Suerte!
Un beso
P.D.: Un ejemplo de función en PHP para sustituir caracteres/subcadenas en una cadena es
str_replace()