Note that php5.3 rawurlencode will do exactly the same thing.
For PHP 5.2, easy replacement to this function :
<?php
function rfc3986_encode($str)
{
$str = rawurlencode($str);
$str = str_replace('%E7', '~', $str);
return $str;
}
?>