Efectivamente, al pasar un parámetro por URL, existen problemas con ciertos valores de los parámetros. Por ejemplo, si un texto que queremos pasar contiene espacios, o símbolos como "+", no lo recibiremos correctamente, a no ser que hagamos algo:
Tienes que codificar la variable a formato URL antes de ponerla en el enlace. Si codificas la variable los caracteres problemáticos (como los espacios) serán cambiados por otros que no te darán problemas. Para ello tienes que utilizar la función de PHP urlencode().
Por ejemplo, mira este código PHP para pasar un par de datos conflictivos por URL:
<a href="mipag.php?var1=<?php echo urlencode("mi valor 1");?>&var2=<?php echo urlencode("otro+valor%raro.en\*url");?>">
Enlace con paso de variables
</a>
Este código PHP generará la siguiente salida HTML, donde podemos apreciar cómo se han convertido los caracteres raros en códigos que se pueden pasar correctamente por la URL:
<a href="mipag.php?var1=mi+valor+1&var2=otro%2Bvalor%25raro.en%2Aurl">
Enlace con paso de variables
</a>
Entonces se podrán recibir los datos en la página a la que se dirige el enlace, como de costumbre:
echo $_GET["var1"];
echo $_GET["var2"];
Las varibles que se reciben ya tiene decodificada la URL, es decir, con los caracteres tal como queremos recibirlos, no por los códigos específicos de la URL.
Puedes encontrar información sobre esa función en la propia página de PHP: Documentación de la función urlencode