buenas,
es normal que el resultado sea el que estas experimentando. hay navegadores que automaticamente convierte los espacios a signos + en lugar de convertirlo al equivalente hexadecimal. dado esa peculiaridad, los lenguajes de servidor automaticamente los convierte a espacio. lo que siempre deberías hacer es codificar el valor que intentas pasar por HTTP con la función encodeURIComponent. de esa manera, cualquier caracter especial es codificado para que lo considere como literal.