Urldecode() es la función adecuada para lo que necesistas, eso convierte los espacios a %20 y acentos en sius %nº correspondiente. También tienes rawurlencode() (sustituye los espacios por +)
Eso sí .. respeta el uso de comillas donde las necesites .. si nececistas comillas dobles entre un "entrecomillado" doble .. escapalas, con el \ delante:
Código PHP:
echo "<a href=\"".urlencode($datos['descripcion']."\">Texto</a>";
De todas formas .. lo que se suele "codificar" no es el URL entero sino las variables que puedan contener acentos, espacios, ñ y otro tipo de caracteres de ese estilo. Algo tipo:
"http:\\www.nose.tal\nose.php?variable=".urlencode ($variable)
Un saludo,