$ string = preg_replace ("/ (% | & | #) /", '', $ string);
Как то так? Это должно сработать, если я понял вашу проблему.
РЕДАКТИРОВАТЬ: Хорошо, это то, что вы ищете:
<?php
function myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D', '%5E');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]", "^");
return str_replace($entities, $replacements, urlencode($string));
}
$search = myUrlEncode($_GET['id']);
$search = preg_replace("/(%|&|#)/", '', $search);
echo $search;
?>