Как кодировать url в php (urlencode не подходит)?
все, что тебе нужно - сделать htmlspecialchars:<?php
$url = 'http://server.ru/?var=foo&var=Привет, мир!&XSS=<script>alert(1)</script>';
$url = htmlspecialchars($url);
?>
<a href="<?=$url?>">link</a>
все остальные вопросы про безопасность - твои выдумки. тут почитай материал - phpfaq.ru/tech/safety
Если пользователь вел какое-то авно в строку url-адреса, то это сугубо его личные проблемы, твоя задача лишь при отображении предотвратить XSS. Все. 
Если нужна валидация URL, то самый правильный ответ тут - https://stackoverflow.com/a/1411800
$var = "123";
$url = "site.ru?q=123&h=$var";
А вот так пробовали?